SSIS - 在多个包中查找未使用的变量

时间:2013-01-29 15:47:34

标签: ssis

当处理包含多个软件包的大型SSIS项目时,软件包可能会开始变得有些混乱,这些变量是已创建但从未使用过或已被其他更改变为冗余的变量。我需要能够扫描多个SSIS包并列出所有未使用变量的东西。

2 个答案:

答案 0 :(得分:4)

我设法通过使用一些Powershell来回答我自己的问题。下面的脚本使用xpath来获取变量名称,然后使用正则表达式来查找出现次数,如果它必须出现,因为它已被定义但从未使用过。

唯一需要注意的是,如果你对dtsx文件中自然存在的单词变量使用名称,那么脚本就不会选择它们。我可能需要扩展我的脚本,只对包中的特定节点进行正则表达式搜索。

$results = @()
Get-ChildItem -Filter *.dtsx |
% {
    $xml = [xml](Get-Content $_)
    $Package = $_.Name
    $ns = [System.Xml.XmlNamespaceManager]($xml.NameTable)
    $ns.AddNamespace("DTS", "www.microsoft.com/SqlServer/Dts")
    $var_list = @($xml.SelectNodes("//DTS:Variable/DTS:Property[@DTS:Name = 'ObjectName']", $ns) | % {$_.'#text'})
    $var_list | ? {@([Regex]::Matches($xml.InnerXml, "\b$($_)\b")).Count -eq 1} | 
    % { $results += New-Object PSObject -Property @{
         Package = $Package
            Name = $_}
    }
}
$results

答案 1 :(得分:0)

这是一个很好的问题,因为我对一些相当大的SSIS包有同样的担忧。不幸的是,在SSIS包外部,没有任何可用的功能可以提供此功能。请参阅附加链接中的讨论:

CodePlex

但是,通过打开SSIS包,您可以通过应用以下链接中列出的步骤来确定变量的使用情况:

find-ssis-variable-dependencies-with-bi-xpress

希望这有帮助。