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

时间:2019-05-29 20:58:31

标签: sql sql-server ssis ssis-2012

我正在从事一个由另一个人拥有的项目。他创建了一项工作来更新SQL Server中少数几个表中的字段。该工作基于SSIS程序包。现在,我有了DTSX文件和已禁用的作业。当我在更改DTSX文件中的旧凭据后尝试启用作业时,出现了奇怪的错误。我想查看SSIS包背后的代码,并想了解更新过程的编码方式。 有办法吗?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

  

我想查看SSIS软件包背后的代码,并想了解更新过程的编码方式

正如提到的其他答案一样,dtsx文件是XML文件,您可以简单地使用文本编辑器打开这些文件以检查后面的代码,也可以简单地使用Visual Studio创建一个新的Integration Services项目并添加包以检查其内容。控制流。

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

答案 2 :(得分:1)

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

查询是通过字符串连接构建的字符串。

答案 3 :(得分:1)

根据要使用的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实体相关联的“硬编码”语句。

但是,如果Execute SQL Task是由变量驱动的,那么您将看到如下所示的XML块。那里没有实际的查询,因此您必须找到定义<Variables>的{​​{1}}集合,然后才拥有设计时间值,而没有运行时间值

User::MyQueryVariable

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

  <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>

然后,您还需要在XML中找到 <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> 的定义。