更改表所有者

Léo*_*her 22 sql-server sql-server-2008

我正在尝试更改表的所有者:

sp_changeobjectowner 'OWNER.TABLENAME', 'dbo'
Run Code Online (Sandbox Code Playgroud)

但在执行时我收到错误消息:

消息15001,级别16,状态1,过程sp_changeobjectowner,行62
对象'OWNER.TABLENAME'不存在或不是此操作的有效对象.

Aar*_*and 46

在SQL Server 2005及更高版本中执行此操作的正确方法是停止将前缀视为"所有者".自SQL Server 2005以来,该sp_changeobjectowner过程已被弃用,您应该使用模式DDL,例如:

ALTER SCHEMA dbo TRANSFER [current_owner].tablename;
Run Code Online (Sandbox Code Playgroud)

检查当前的"所有者"(如果您tablename在多个模式中有多个行,则可能会返回多行):

SELECT s.name
  FROM sys.schemas AS s
  INNER JOIN sys.tables AS t
  ON s.[schema_id] = t.[schema_id]
  WHERE t.name = N'tablename';
Run Code Online (Sandbox Code Playgroud)

还要确保正确拼写对象.例如,在区分大小写的排序规则中,TABLENAME并且tablename它们不是同一个对象,并且使用InCorrEcT CaSe拼写它也可能导致此错误.


And*_*ttó 6

你的陈述是正确的:

EXEC sp_changeobjectowner '<owner>.<tableName>', '<newOwner>' 
Run Code Online (Sandbox Code Playgroud)

如果发生错误,请尝试检查谁是表的当前所有者:

EXEC sp_table_privileges '<tableName>'  
Run Code Online (Sandbox Code Playgroud)