2013-08-20 22 views
2

我正在玩SMO並試圖用它來將數據庫所有者更改爲sa。代碼是SQL Server SMO,應該每次調用刷新我修改了一些東西?

# 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()成員的所有對象類型?

謝謝

回答

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)}} 
相關問題