日志搜索
用户登录
数据载入中,请稍等...
用户公告
数据载入中,请稍等...
时间记忆
数据载入中,请稍等...
最新日志
数据载入中,请稍等...
最新回复
数据载入中,请稍等...
最新留言
数据载入中,请稍等...
统计信息
数据载入中,请稍等...
修改MS SQL数据库中表及存储过程的所有者

  在导入/导出MS SQL Server 数据库到远程数据库的时候,我们经常会发现一个:

    导入或者导出时,数据库对象的所有者,默认是远程数据库的用户名

当我们建完SQL查询语句复制数据库表后,却发现有两套所有者不同的数据库表。

其实,可以在远程建完数据库结构以后,修改所有用户表的所有者为远程数据库的账户来实现。具体方法:
在远程数据库新建查询,输入以下SQL语句(如:sq_wlg456为远程数据库用户,dbo是本地的所有者)


1. 修改表的所有者

declare cur cursor for

select name from sysobjects where uid=user_id('sq_wlg456') and xtype='U'

declare @name sysname

declare @sqlstr varchar(5000)

open cur

fetch next from cur

into @name

while @@fetch_status=0

begin

set @sqlstr='exec sp_changeobjectowner ''sq_wlg456.'+@name+''',''dbo'''

exec (@sqlstr)

fetch next from cur

into @name

end

close cur

deallocate cur

2. 修改存储过程的所有者

declare @tn varchar(120)

declare procedure_cursor cursor for
SELECT '[' + sysusers.name + '].' + sysobjects.name AS procedure_name
FROM sysobjects INNER JOIN sysusers ON sysobjects.uid = sysusers.uid
WHERE sysusers.name = 'YourUserName' AND sysobjects.type = 'P'

open procedure_cursor
fetch next from procedure_cursor into @tn

while @@FETCH_STATUS = 0
begin
exec sp_changeobjectowner @tn, 'dbo'

fetch next from procedure_cursor into @tn
end

close procedure_cursor
deallocate procedure_cursor


3. 修改视图的所有者

declare @tn varchar(120)

declare view_cursor cursor for
SELECT '[' + sysusers.name + '].' + sysobjects.name AS view_name
FROM sysobjects INNER JOIN sysusers ON sysobjects.uid = sysusers.uid
WHERE sysusers.name = 'YourUserName' AND sysobjects.type = 'V'

open view_cursor
fetch next from view_cursor into @tn

while @@FETCH_STATUS = 0
begin
exec sp_changeobjectowner @tn, 'dbo'

fetch next from view_cursor into @tn
end

close view_cursor
deallocate view_cursor

注意:三段脚本只是为便于理解才分开来写,不同之处只在于sysobjects.type = 'U',sysobjects.type = 'P'及sysobjects.type = 'V'

 

  • 标签:存储过程 所有者 
  • 发表评论:
    数据载入中,请稍等...
    Copyright © 超音速工作室                                 生活因感动而精彩,理想在创造中放飞
    Powered by Oblog.