从 dtsx 中提取数据
Extract data from dtsx
我需要创建一个自动进程来搜索正在使用 table 的多个 *.dtsx(2017 版),是否可以这样做?
最后,将包名称保存在 table 中,并在该包中使用哪个 table。
感谢您的宝贵时间
有文档工具,你可以在这篇文章中找到一些例子:https://dbmstools.com/categories/ssis-documentation-tools .
如果您想自己做,那么它的范围从简单到非常复杂的任务不等。
最后一个 .dtsx
是一个 XML
文件。如果您知道要查找的表,并且只需要知道这些表是否在包中的某处命名,那么简单的搜索就可以为您提供答案。
现在,如果您需要知道哪些表以及它们在包中的使用方式(例如输入、输出、通过 OLE 或 sql 命令等),那么您可能需要分析 XML
文件 xpath
,通过 powershell
或 SQL
,这可能非常复杂。
如果将包部署到 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
我需要创建一个自动进程来搜索正在使用 table 的多个 *.dtsx(2017 版),是否可以这样做?
最后,将包名称保存在 table 中,并在该包中使用哪个 table。
感谢您的宝贵时间
有文档工具,你可以在这篇文章中找到一些例子:https://dbmstools.com/categories/ssis-documentation-tools .
如果您想自己做,那么它的范围从简单到非常复杂的任务不等。
最后一个 .dtsx
是一个 XML
文件。如果您知道要查找的表,并且只需要知道这些表是否在包中的某处命名,那么简单的搜索就可以为您提供答案。
现在,如果您需要知道哪些表以及它们在包中的使用方式(例如输入、输出、通过 OLE 或 sql 命令等),那么您可能需要分析 XML
文件 xpath
,通过 powershell
或 SQL
,这可能非常复杂。
如果将包部署到 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