【发布时间】:2016-04-18 12:57:19
【问题描述】:
我需要审核 msdb 中的 100 多个 SSIS 包,并且我需要从每个包中提取所有变量和相关值。我想出了下面的脚本(目前只读取一个包),因此我可以列出 DTS:Variable 节点中的所有内容,但我不确定如何提取每个变量和值。
;WITH XMLNAMESPACES ('www.microsoft.com/SqlServer/Dts' as dts)
SELECT Con.Str.value('.', 'varchar(400)')
FROM (
SELECT CONVERT(XML, CONVERT(VARBINARY(MAX), packagedata)) AS pkgXML
FROM msdb.dbo.sysdtspackages90
WHERE name = 'SSISPackageName'
) pkgblob
CROSS APPLY pkgXML.nodes('//dts:Variable') as Con(Str)
示例 XML
<DTS:Variable>
<DTS:Property DTS:Name="Expression" />
<DTS:Property DTS:Name="EvaluateAsExpression">0</DTS:Property>
<DTS:Property DTS:Name="Namespace">User</DTS:Property>
<DTS:Property DTS:Name="ReadOnly">0</DTS:Property>
<DTS:Property DTS:Name="RaiseChangedEvent">0</DTS:Property>
<DTS:VariableValue DTS:DataType="3">50000</DTS:VariableValue>
<DTS:Property DTS:Name="ObjectName">DeleteBatchQty</DTS:Property>
<DTS:Property DTS:Name="DTSID">{2A967BFC-BE6C-41C8-B574-6CB94D09C96E} </DTS:Property>
<DTS:Property DTS:Name="Description" />
<DTS:Property DTS:Name="CreationName" />
</DTS:Variable>
所以我需要“DeleteBatchQty”的 ObjectName,在上面的示例中它的值是“50000”,最终是所有变量的列表。
如果有人有答案,将不胜感激。
谢谢。
【问题讨论】: