修改MS SQL2K数据库中表的所有者及其它

有些时候,一个数据库的管理员,需要将几个不同的数据库内的数据合并到一起,如果几个数据库的结构基本相同,只需新建一个数据库,将其它几个数据库内的对象复制并追加到新数据库内并做细微调整即可达到目的,但是,不同的数据库可能存在不同的用户账号,数据库对象——譬如:表,存储过程及视图等——的所有者也可能不同,这样,在倒入数据时,系统会将同名但不同所有者的数据库对象识别为不同的对象,会在目标库中新建对象而非追加,并且会因为目标库中没有相应的用户账号而报用户不存在的错,那么,统一数据库对象的所有者就狠必要了,DBO用户是一个好的选择,如果还不清楚DBO的含义及作用,赶紧翻翻书或是用Google搜索一下,俺就不再背书了,呵呵...

还是老习惯,下面给出更改数据库表,存储过程及视图所有者的SQL脚本,需要说明的是,这段脚本同样可以用于将数据库对象的所有者由DBO用户更改为其它指定的用户,使用的方法为:将YourUserName更改为DBO,在原有DBO的位置输入想要指定的用户账号名称,执行即可,当然,这段脚本代码在使用的时候是狠灵活的,并非只针对关于DBO与其它指定账号之间的更改,实践一下就自然明白了

1. 修改表的所有者

declare @tn varchar(120)

declare table_cursor cursor for
SELECT '[' + sysusers.name + '].' + sysobjects.name AS table_name
FROM sysobjects INNER JOIN sysusers ON sysobjects.uid = sysusers.uid
WHERE sysusers.name = 'YourUserName' AND sysobjects.type = 'U'

open table_cursor
fetch next from table_cursor into @tn

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

  fetch next from table_cursor into @tn
end

close table_cursor
deallocate table_cursor


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'

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值