我可以使用sp_changeobjectowner
更改单个表的所有权。更改数据库中所有对象的所有权
如果我想更改数据库中所有对象的所有权,我应该编写一个存储过程来遍历每个对象还是有另一种方式?
UPDATE 我还发现,更改我的用户的默认架构解决了导致我认为需要更改所有对象的所有权的问题。
我可以使用sp_changeobjectowner
更改单个表的所有权。更改数据库中所有对象的所有权
如果我想更改数据库中所有对象的所有权,我应该编写一个存储过程来遍历每个对象还是有另一种方式?
UPDATE 我还发现,更改我的用户的默认架构解决了导致我认为需要更改所有对象的所有权的问题。
如果您正在寻找改变只是表的拥有者可以使用无证sp_MSforeachtable
这样的:
sp_MSforeachtable @command1="sp_changeobjectowner '?', 'new_owner'"
如果你真的需要的所有对象,那么你就需要进行迭代。单程(但不是唯一的方法)会是一个光标像这样的:上述
DECLARE @currentObject nvarchar(517)
DECLARE @qualifiedObject nvarchar(517)
DECLARE @currentOwner varchar(50)
DECLARE @newOwner varchar(50)
SET @currentOwner = 'ASPNET'
SET @newOwner = 'dbo'
DECLARE alterOwnerCursor CURSOR FOR
SELECT [name] FROM dbo.sysobjects
WHERE
xtype in ('FN','IF','P','TF','U','V', 'TT', 'TF') --Modify list to add and remove object types*
OPEN alterOwnerCursor
FETCH NEXT FROM alterOwnerCursor INTO @currentObject
WHILE @@FETCH_STATUS = 0
BEGIN
SET @qualifiedObject = CAST(@currentOwner as varchar) + '.' + CAST(@currentObject as varchar)
EXEC sp_changeobjectowner @qualifiedObject, @newOwner
FETCH NEXT FROM alterOwnerCursor INTO @currentObject
END
CLOSE alterOwnerCursor
DEALLOCATE alterOwnerCursor
光标是this一个未经测试和修改后的版本。
*注意:游标查询是指一个列表xtypes
。请查看this获取完整列表。
尝试运行此查询,然后只需选择所有结果,并在单独的查询执行
select 'EXEC sp_changeobjectowner ''' + S.name + '.' + O.name + '' + ''', ''new_owner'''
from sys.all_objects O
inner join sys.schemas S
on O.schema_id = S.schema_id
where O.type in ('FN','IF','P','TF','U','V', 'TT', 'TF')
我想补充的选择:在S.name = @currentOwner和sysobjects.schema_id **内加入sys.schemas小号= S.schema_id **以防万一并非所有对象都属于旧所有者 – TPAKTOPA 2016-03-28 13:07:30