SQL Server SMO,我应该在每次修改内容时调用刷新吗?

时间:2013-08-20 17:28:18

标签: sql-server powershell smo

我正在玩SMO并尝试使用它将数据库所有者更改为sa。代码是

# To simplify our discussing, let's say we have a function Get-SMOServer
$s = Get-SMOServer -Instance myserver\myinstance
$s.databases | ?{$_.owner -ne "sa"} | %{$_.setowner("sa", $true)}

此时,当我从SSMS检查数据库所有者时,所有者已经更改。但是,如果我从$s.databases检查它,我仍然会得到旧数据,直到我执行以下操作:

$s.databases | %{$_.refresh()}

然后我可以从$s.databases获得正确的结果。 我检查了SMO对象,发现其中很多都有refresh()函数。我的问题是,每次修改某个对象时,我应该调用refresh()吗?如何查找具有refresh()成员的所有对象类型?

由于

1 个答案:

答案 0 :(得分:0)

您可以查看SMO程序集。我正在使用2008 R2附带的SMO:

$assm = add-type -AssemblyName "Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" -EA Stop -PassThru

$assm | %{$hasRefreshMethod = $null; $hasRefreshMethod = $_.GetMethods() | ?{$_.name -eq "Refresh"}; new-object psobject -property @{Name=$_.Name; HasRefreshMethod=$($hasRefreshMethod -ne $null)}}