Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS-在多个包中查找未使用的变量_Ssis - Fatal编程技术网

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

SSIS-在多个包中查找未使用的变量,ssis,Ssis,在处理包含多个包的大型SSIS项目时,这些包可能会开始变得有点混乱,因为这些变量是创建的,但从未使用过,或者由于其他更改而变得多余。我需要一些东西来扫描几个SSIS包并列出所有未使用的变量。这是一个很好的问题,因为我同样关心一些相当大的SSIS包。不幸的是,除了SSIS包之外,没有任何功能可以提供此功能。请参阅所附链接中的讨论: 但是,通过打开SSIS包,您可以通过应用以下链接中概述的步骤来确定变量使用情况: 希望这能有所帮助。我通过使用一些Powershell来回答我自己的问题。下面的脚本

在处理包含多个包的大型SSIS项目时,这些包可能会开始变得有点混乱,因为这些变量是创建的,但从未使用过,或者由于其他更改而变得多余。我需要一些东西来扫描几个SSIS包并列出所有未使用的变量。

这是一个很好的问题,因为我同样关心一些相当大的SSIS包。不幸的是,除了SSIS包之外,没有任何功能可以提供此功能。请参阅所附链接中的讨论:

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


希望这能有所帮助。

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

唯一需要注意的是,如果您使用的变量名称是dtsx文件中自然存在的单词,那么脚本将不会提取它们。我可能需要扩展脚本,以便只在包中的spesific节点上执行正则表达式搜索

$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

对我来说效果很好。另一个警告是,此方法(显然!)不会发现子dtsx包用作父子包配置变量的任何变量。不过这是一段很棒的Powershell代码Dave,谢谢!