【问题标题】:Change MSSQL Schema Ownership via Powershell通过 Powershell 更改 MSSQL 架构所有权
【发布时间】:2017-11-19 14:34:15
【问题描述】:

我正在尝试使用以下 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 方法正在寻找更多参数,但我不确定它需要什么参数。有人对我做错了什么有任何建议吗?

谢谢 布拉德

【问题讨论】:

标签: sql-server powershell schema smo


【解决方案1】:

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

【讨论】:

  • 好主意,但不幸的是没有更多的事情要做。除了上面的错误之外,唯一的附加行是:执行 Transact-SQL 语句或批处理时发生异常。这仍然很模糊。
  • 如果我只是添加 $schema 我看到所有者已更改,我认为 .Alter() 应该提交更改,但显然有些不对劲。
  • 更正“模糊错误”。你必须一路走下去(Inception 风格),直到找到问题的根源。也就是说,我认为您得到了“执行 Transact-SQL 语句或批处理时发生异常”。来自$e.Exception.InnerException$e.Exception.InnerException.InnerException 给你什么?继续添加对InnerException 的调用,直到您得到类似于原因的内容或直到它返回$null
  • 添加 .InnerException 没有帮助。我能得到的最详细的错误是:使用“0”参数调用“Alter”的异常:“模式'dbo'的改变失败。”模式'dbo'的改变失败。执行 Transact-SQL 语句或批处理时发生异常。无法更改架构“dbo”。
猜你喜欢
  • 2013-07-08
  • 2020-02-21
  • 2020-07-06
  • 2016-12-09
  • 2018-12-03
  • 2013-05-23
  • 1970-01-01
  • 2021-12-14
  • 2021-09-02
相关资源
最近更新 更多