【问题标题】:Is it possible to Decompile and read an SSIS package code?是否可以反编译和读取 SSIS 包代码?
【发布时间】:2023-03-25 02:34:01
【问题描述】:

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

【问题讨论】:

  • 如果我没记错的话,DTSX 文件是 XML 文件。只需重命名为 xml,然后使用编辑器打开即可。
  • 是的,我可以使用写字板看到。但是有没有办法查看“更新”是如何编码的?我在 DTSX 文件中没有看到与该要求相关的任何内容。
  • 谢谢。你的想法实际上很有帮助。找到需要的语句。您可以发表评论作为答案吗?

标签: sql sql-server ssis etl ssis-2012


【解决方案1】:

想看看SSIS包背后的代码,想看看更新过程是怎么编码的

正如其他答案所提到的,dtsx 文件是 XML 文件,您可以简单地使用文本编辑器打开这些文件以检查背后的代码,或者您可以简单地使用 Visual Studio 创建一个新的集成服务项目并添加包以检查它控制流。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 您不需要将其重命名为 *.XML,因为 DTSX 中的 X 代表 XML。只需在 Notepadd++ 中打开 *.DTSX。
    • 如果您想要漂亮的 XML 语法突出显示,只需将 dtsx 添加到与 Notepad++ 中的设置 -> 样式配置器下的 XML 语言关联的扩展列表中。例如,我添加了以下扩展:build dstx ds dsv cube dim dwproj xmla config nunit nbits.
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      但是,如果执行 SQL 任务是由变量驱动的,那么您会看到如下的 XML 块。那里没有实际查询,因此您必须找到定义 User::MyQueryVariable&lt;Variables&gt; 集合,然后您将只有设计时值而不是运行时值

        <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 的定义。

      【讨论】:

        猜你喜欢
        • 2021-02-17
        • 1970-01-01
        • 2016-06-06
        • 1970-01-01
        • 2018-07-27
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        • 2012-03-14
        相关资源
        最近更新 更多