本文所列内容在Vultr的VPS上面测试通过。

在SQL Server 2000里面,默认的存储过程、数据表等属主(就是所有人)是建立者,在某些情况下需要更改,比如将数据库还原到其他机器上。如果不更改的话非属主是无法进行一些关键操作的,但是系统没有提供直接修改的方法,本文提供一个用存储过程批量更改的途径。

首先在查询分析器建立一个存储过程,应该建立在master还是目标数据库我记不清了,都可以试一下,记得要用sa或者sysadmin的身份运行:

CREATE   PROCEDURE   dbo.ChangeObjectOwner
@OldOwner as   NVARCHAR(128),--参数原所有者
@NewOwner as   NVARCHAR(128)--参数新所有者
AS

DECLARE   @Name   as   NVARCHAR(128)   
DECLARE   @Owner as   NVARCHAR(128)
DECLARE   @OwnerName as   NVARCHAR(128)

DECLARE   curObject   CURSOR   FOR   
select 'Name' = name,
'Owner' =  user_name(uid)
from   sysobjects
where   user_name(uid)=@OldOwner
order   by   name

OPEN     curObject
FETCH   NEXT   FROM   curObject   INTO   @Name,   @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN         
if   @Owner=@OldOwner   
begin
set   @OwnerName   =   @OldOwner   +   '.'   +   rtrim(@Name)
exec   sp_changeobjectowner   @OwnerName,   @NewOwner
end

FETCH   NEXT   FROM   curObject   INTO   @Name,   @Owner
END

close   curObject
deallocate   curObject
GO

然后将当前数据库定位到需要设置的数据库,执行下面语句就行:

EXEC changeobjectowner '?','dbo'

这一句会将数据库的所有对象属主设置为dbo,那么以后会很方便,只要用户具有dbo身份就可以,也可以设置为某个具体的用户名。

作者 听涛

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注