从 dtsx 中提取数据

Extract data from dtsx

我需要创建一个自动进程来搜索正在使用 table 的多个 *.dtsx(2017 版),是否可以这样做?

最后,将包名称保存在 table 中,并在该包中使用哪个 table。

感谢您的宝贵时间

有文档工具,你可以在这篇文章中找到一些例子:https://dbmstools.com/categories/ssis-documentation-tools .

如果您想自己做,那么它的范围从简单到非常复杂的任务不等。

最后一个 .dtsx 是一个 XML 文件。如果您知道要查找的表,并且只需要知道这些表是否在包中的某处命名,那么简单的搜索就可以为您提供答案。

现在,如果您需要知道哪些表以及它们在包中的使用方式(例如输入、输出、通过 OLE 或 sql 命令等),那么您可能需要分析 XML 文件 xpath,通过 powershellSQL,这可能非常复杂。

如果将包部署到 SSIS 目录,您可以在 SSISDB 表中找到一些信息。

如果 custom logs 已启用并且包有 运行,您可能能够在 logs.

中获取信息

DTSX 基本上是 XML 文件。您可以将内容加载到 xml 变量并查询那里使用的 table 名称。

Reference MSDN wiki link。我已经根据您的需要稍微修改了代码。以下代码未经测试。

declare @t table
(
x xml
)
 
declare @ObjectName varchar(100) = <Your Object Name To be Searched>
 
INSERT @t
SELECT *
FROM OPENROWSET(BULK '<Full Package Path>',
   SINGLE_BLOB) AS x;

WITH XMLNAMESPACES ('www.microsoft.com/SqlServer/Dts' AS DTS,'www.microsoft.com/sqlserver/dts/tasks/sqltask' AS SQLTask)
   SELECT   t.u.value('.','varchar(100)')
   FROM DTSPackages
   CROSS APPLY x.nodes('/DTS:Executable/DTS:Property[@DTS:Name="ObjectName"]')t(u)
   WHERE
   x.exist('//SQLTask:SqlTaskData[contains(./@SQLTask:SqlStatementSource,sql:variable("@ObjectName"))]')=1