如何解决从 dtsx 中提取数据
我需要创建一个自动过程,在多个 *.dtsx(2017 版)中搜索正在使用的表,是否可以这样做?
最后,将包名称保存在一个表中,以及该包中正在使用哪个表。
感谢您的时间
解决方法
有文档工具,你可以在这篇文章中找到一些例子:https://dbmstools.com/categories/ssis-documentation-tools .
如果你想自己做,那么它的范围可以从简单到非常复杂的任务。
最后一个 .dtsx
是一个 XML
文件。如果您知道要查找哪些表,并且只需要知道这些表是否在包中的某处命名,那么简单的搜索就可以为您提供答案。
现在,如果您需要知道哪些表以及它们在包中的使用方式(例如输入、输出、通过 OLE 或 sql 命令等),那么您可能需要使用 {{ 1}},通过 XML
或 xpath
这可能非常复杂。
如果将包部署到 SSIS 目录,您可以在 powershell
表中找到一些信息。
如果启用了 SQL
并且程序包已经运行,您可能能够在 SSISDB
中获取信息。
DTSX 基本上是 XML 文件。您可以将内容加载到 xml 变量并查询在那里使用的表名。
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。