有时候,我们从别的服务器备份一个数据库还原到本机后,发现使用的用户不是sa,即所属的表不是dbo,倒置运行时报错找不到对象。这时候就要想办法把这些表的所属用户修改为dbo。
网上搜索了一下,发现数据库本身就有存储过程专门干这事的。用法如下:
exec sp_changeobjectowner 'tablename','dbo'
一个一个改比较麻烦,所以写个游标来一次性搞定。
DECLARE @OldOwner as NVARCHAR(128) DECLARE @NewOwner as NVARCHAR(128) DECLARE @Name as NVARCHAR(128) DECLARE @Owner as NVARCHAR(128) DECLARE @OwnerName as NVARCHAR(128) SET @OldOwner = 'a0928152857' --原所属用户 SET @NewOwner = 'dbo' --要改的新所属用户 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