• 3月
    22日
    SQL Server 改变对象所属用户的方法
    MsSQL [0] 2014-03-22 03:06 1778 0

    有时候,我们从别的服务器备份一个数据库还原到本机后,发现使用的用户不是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


文章评论