本文所列内容在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身份就可以,也可以设置为某个具体的用户名。