如何使用PowerShell和SMO更改......检查约束

时间:2019-04-02 17:19:19

标签: powershell smo

我有一个PowerShell脚本,用于检查是否启用和检查了约束。我想添加一个步骤来做等效于“ ALTER ..... CHECK CHECK CONSTRAINT”的操作,但是我找不到与此有关的任何MS SMO文档。 如何使用PowerShell和SMO做到这一点?

这给出了约束当前状态的信息。

[Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.Smo') | Out-Null
$Srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" $SqlServer
$srv.Databases | % { 
    $Database = $_.Name
    $_.Tables | % {
           $_.Checks | % {
            "Database $Database Table $($_.Parent.Name) constraint $($_.Name)`n$($_.Text)  `nIsChecked: $($_.IsChecked) "
           }
        }
}

1 个答案:

答案 0 :(得分:0)

在我看来SMO没有为外键/默认约束对象提供方法。 您可能需要使用Dbcc CheckConstraint对sql调用进行某些操作。尽管以编程方式做某事有点无聊。

当我遇到这样的绊脚石时,我倾向于寻找dbatools人们正在寻求帮助的出色工作。

假设您不想使用整个dbatools模块,通常可以从已建立的模块中获取正在生成的命令。我发现他们对命令输出结果的辛勤工作最有帮助。

https://docs.dbatools.io/#Invoke-DbaDbDbccCheckConstraint

查看该逻辑的github代码-假设您要收集/输出DbccCheckConstraint调用的结果将对您有帮助。

https://github.com/sqlcollaborative/dbatools/blob/development/functions/Invoke-DbaDbDbccCheckConstraint.ps1