我在SSIS 2012中有一个包含大约150个软件包的项目。其中一个是入口点,其余的被称为主要的下线。如果不存在,则每个表都在目标中创建自己的表。我发现我需要将DelayValidation设置为True才能使其工作,但不喜欢这样做150次。有没有办法让这个属性传播或除了对所有包进行更改之外的任何其他内容?
答案 0 :(得分:2)
您可以使用.NET库进行此更改。下面是一个PowerShell脚本,它查看给定文件夹中的所有包。如果DelayValidation
属性为false,则会将其更改为True并保存包。
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SQLServer.ManagedDTS") | Out-Null
$folder = "C:\sandbox\StackOverflow\StackOverflow\obj\Development"
$app = New-Object Microsoft.SqlServer.Dts.Runtime.Application
foreach($current in (Get-ChildItem $folder -Filter "*.dtsx").FullName)
{
Write-Host $current
$package = $app.LoadPackage($current, $null)
if ($package.DelayValidation -eq $false)
{
$package.DelayValidation = $true
$app.SaveToXml($package, $null)
}
}
答案 1 :(得分:0)
我找到了更快捷的方法,即在每个包的代码中找到DelayValidation">0<
并替换为DelayValidation">-1<
。它比逐项逐项更新并更改属性更快,但您仍然必须为每个包执行此操作。
答案 2 :(得分:0)
将DelayValidation“> 0设置为DelayValidation”>-1在SSIS 2008和SSIS 2008 R2中有效,但在SSIS 2012中不存在。默认情况下,SSIS 2012中的组件没有该项-DTS:DelayValidation 。将组件的DelayValidation设置为True后,将添加以下内容-DTS:DelayValidation =“ True”。我正在使用Visual Studio Ultimate 2012。