我正在玩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()
成员的所有对象类型?谢谢
最佳答案
您可以查看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)}}
关于sql-server - SQL Server SMO,应该在每次修改内容时调用刷新吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18341396/