通过Powershell更改MSSQL架构所有权

时间:2017-06-16 18:17:10

标签: sql-server powershell schema smo

我试图更改此用户拥有的"架构"在使用以下powershell脚本的数据库上:

$dbname = "mydb"
$sql_server = "mysqlserver"
$username = "myuser"

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null

$server = New-Object ("Microsoft.SqlServer.Management.Smo.Server")($sql_server)
$db = $server.Databases["$dbname"]
$login = $server.Logins[$username]
$roleName = "db_owner"

if(-not $db.Users.Contains($login.Name)){
    $user = New-Object('Microsoft.SqlServer.Management.Smo.User') $db, $login.Name
    $user.Login = $login.Name
    $user.create();
}

$user = $db.Users[$login.Name]       
$role = $db.Roles[$roleName]
$role.AddMember($user.Name);

$schema = $db.Schemas["dbo"]
$schema.Owner = "myuser"
$schema.Alter()

当我到达$ schema.Alter()时,我收到以下错误:

Exception calling "Alter" with "0" argument(s): "Alter failed for Schema 'dbo'. "
At line:1 char:1
+ $schema.Alter()
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FailedOperationException

我得到的印象是Alter Method正在寻找更多参数,但我不确定它想要什么参数。任何人都有任何建议我做错了吗?

由于 布拉德

1 个答案:

答案 0 :(得分:1)

根据我的经验,顶级异常没有帮助。我处理此问题的典型方法类似$e = $error[0];,然后调用$e.Exception$e.Exception.InnerException$e.Exception.InnerException.InnerException,......直到我到达实际错误。这并不能解决您的问题,但至少可以让您更好地了解 的问题。