我试图改变一个表的所有者:
sp_changeobjectowner 'OWNER.TABLENAME', 'dbo'
但是,当执行我得到的错误信息:
消息15001,级别16,状态1,过程sp_changeobjectowner,62号线
对象“OWNER.TABLENAME”不存在或不是此操作的有效对象。
我试图改变一个表的所有者:
sp_changeobjectowner 'OWNER.TABLENAME', 'dbo'
但是,当执行我得到的错误信息:
消息15001,级别16,状态1,过程sp_changeobjectowner,62号线
对象“OWNER.TABLENAME”不存在或不是此操作的有效对象。
要做到这一点在SQL Server 2005,上了正确的方法是停止思考的前缀为“老板”。 该sp_changeobjectowner
过程 ,因为SQL Server 2005中已被弃用,你应该改为使用模式的DDL ,如:
ALTER SCHEMA dbo TRANSFER [current_owner].tablename;
要检查当前的“所有者”(这可能返回多行,如果你有一个以上的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';
另外要确保你正确拼写的对象。 在一个区分大小写排序,例如, TABLENAME
和tablename
是不一样的对象,并使用不正确的大小写拼写它也可能导致该错误。
你的说法正确的是:
EXEC sp_changeobjectowner '<owner>.<tableName>', '<newOwner>'
如果错误happend,尝试检查谁是表的当前所有者:
EXEC sp_table_privileges '<tableName>'
SELECT 'Exec sp_changeobjectowner ''<CURRENTOWNER>.' + name + ''', ''dbo'' ' FROM sys.objects WHERE type IN ('U','P','V','FN')
应用以下步骤
(1)运行继SQL查询提示(2)复制的结果,再粘贴到新的SQL查询并再次执行
这是你的表,视图,存储过程和函数的所有者更改
如果删除表是一个选项,您可以删除,并在所需的用户重新创建。 只要指定在创建脚本DBO。 例如:
USE [X]
GO
/****** Object: Table [dbo].[TableName] Script Date: 4/21/2014 1:26:37 PM ******/
CREATE TABLE [dbo].[TableName](
[Field1] [bigint] NOT NULL,
[Field2] [nvarchar](50) NOT NULL,
[Field3] [datetime] NOT NULL
) ON [PRIMARY]
GO
为了弥补其中类似“共同”构建的架构名称中存在一个表的情况下(即不相关的用户名),那么它是架构所有者需要改变。
alter authorization on schema::Common TO dbo;
这将更改架构到指定的所有者“dbo”中的对象,并保持在“共同”表。
要列出模式所有者:
select db_name() as Db,
sch.name as SchemaName,
u.Name as Owner
from sys.schemas sch
join sys.sysusers u
on u.uid = sch.principal_id;