时间:2011-07-07 16:17:33

标签: sql sql-server database stored-procedures

如何更改SQL Server 2000数据库中所有表和存储过程的所有者。

我认为“sp_changeobjectowner”可以做到,但我找不到实现此目的的方法。

任何人都可以帮助我吗?

EDIT

declare
@old_owner char(45),
@new_owner char(45)

set @old_owner = 'dbo'
set @new_owner = 'mynewuser'

select 'exec sp_changeobjectowner ''' + replace(@old_owner,' ','') + '.' + t1.name + '''' + char(44) + char(32) + '' + @new_owner + '' + char(13) 
from sysobjects t1, sysusers t2
where t1.uid = t2.uid
and t1.name not like 'sys%'
and t2.uid <> 7
and t2.name = @old_owner

2 个答案:

答案 0 :(得分:1)

您拥有的查询将返回一个结果集,其中包含您需要的所有命令,但您仍需要实际运行这些命令。

复制结果,将其粘贴到查询窗口中,然后尝试运行它们。

答案 1 :(得分:0)

确保新所有者是该数据库中的用户。

您可能需要在域名前添加用户名:'domain \ username'。

use Northwind 
exec sp_MSforeachtable @command1="sp_changeobjectowner '?', 'domain\username'" 

如果您只需要根据某些条件更改所有者,也可以尝试使用游标:

DECLARE tables CURSOR
FOR
    SELECT [name]
      FROM sysobjects
     WHERE xtype = 'u'

OPEN tables
DECLARE @TableName NVARCHAR(512)
FETCH NEXT FROM tables INTO @TableName

WHILE @@fetch_status = 0
BEGIN

    EXEC sp_changeobjectowner @TableName, 'dbo'

    FETCH NEXT FROM tables INTO @TableName
END
CLOSE tables
DEALLOCATE tables