是否可以反编译并读取 SSIS 包代码?

Is it possible to Decompile and read an SSIS package code?

我正在从事另一个人所有的项目。他创建了一个工作来更新 SQL 服务器中少数表格中的一堆字段。该工作基于 SSIS 包。现在我有了 DTSX 文件和禁用的作业。当我在更改 DTSX 文件中的旧凭据后尝试启用该作业时,出现了奇怪的错误。我想看看 SSIS 包背后的代码,想看看更新过程是如何编码的。 有办法吗?

DTSX 文件就是 XML 文件。只需重命名为 xml,然后用编辑器打开即可。

查询是一个通过字符串连接建立的字符串。

创建一个新解决方案并将 DTSX 文件导入其中。 Visual Studio 只是作为 SSIS 包的美化 XML 编辑器。

I want to see the code behind the SSIS package and want to see how the update process is coded

正如其他答案提到的,dtsx 文件是 XML 文件,您可以简单地使用文本编辑器打开这些文件来检查背后的代码,或者您可以简单地使用 [=37 创建一个新的 Integration Services 项目=] 并添加包以检查其控制流。

我添加了自己的答案以列出我发布的与此问题相关的一些内容,因为它可能会给您一些见解:

  • Parse SSIS package

根据您使用的 SSIS 版本,您需要查看包的 XML(如果打开包,请按 F7)并找到如下所示的块

<DTS:Executable
  DTS:refId="Package\Execute SQL Task"
  DTS:CreationName="Microsoft.ExecuteSQLTask"
  DTS:Description="Execute SQL Task"
  DTS:DTSID="{93D895E6-A316-4718-9C97-4A5652ABD28C}"
  DTS:ExecutableType="Microsoft.ExecuteSQLTask"
  DTS:LocaleID="-1"
  DTS:ObjectName="Execute SQL Task"
  DTS:TaskContact="Execute SQL Task; Microsoft Corporation; SQL Server 2017; © 2017 Microsoft Corporation; All Rights Reserved;http://www.microsoft.com/sql/support/default.asp;1"
  DTS:ThreadHint="0">
  <DTS:Variables />
  <DTS:ObjectData>
    <SQLTask:SqlTaskData
      SQLTask:Connection="{CEE71D69-1F9F-46FA-A22F-C9EB60670EA0}"
      SQLTask:SqlStatementSource="UPDATE T SET Count = Count+1 FROM dbo.Table AS T;" xmlns:SQLTask="www.microsoft.com/sqlserver/dts/tasks/sqltask" />
  </DTS:ObjectData>
</DTS:Executable>

此任务使用与 SQLTask:SqlStatementSource 实体关联的 "hard coded" 语句。

但是,如果执行 SQL 任务是由变量驱动的,那么您会看到一个 XML 块,如下所示。那里没有实际查询,因此您必须找到定义 User::MyQueryVariable<Variables> 集合,然后您将只有设计时间值而不是 run-time 值

  <DTS:ObjectData>
    <SQLTask:SqlTaskData
      SQLTask:Connection="{CEE71D69-1F9F-46FA-A22F-C9EB60670EA0}"
      SQLTask:SqlStmtSourceType="Variable"
      SQLTask:SqlStatementSource="User::MyQueryVariable" xmlns:SQLTask="www.microsoft.com/sqlserver/dts/tasks/sqltask" />
  </DTS:ObjectData>

最后,为了完整起见,如果开发人员指定了文件源,您会看到类似这样的内容

  <DTS:ObjectData>
    <SQLTask:SqlTaskData
      SQLTask:Connection="{CEE71D69-1F9F-46FA-A22F-C9EB60670EA0}"
      SQLTask:SqlStmtSourceType="FileConnection"
      SQLTask:SqlStatementSource="FileConnectionSource" xmlns:SQLTask="www.microsoft.com/sqlserver/dts/tasks/sqltask" />
  </DTS:ObjectData>

您还需要在 XML 中找到 FileConnectionSource 的定义。