http://www.cnblogs.com/wantingqiang/archive/2008/12/14/1354738.html
いくつかの場合、データベースの管理者は、いくつかの異なるデータベース内のデータを統合する必要があります。いくつかのデータベースの構造が基本的に同じである場合、新しいデータベースを作成し、他のいくつかのデータベース内のオブジェクトをコピーして新しいデータベースに追加し、微調整を行うだけで目的を達成できます。ただし、異なるデータベースには異なるユーザーアカウント、データベースオブジェクト(例:テーブル、ストアドプロシージャ、ビューなど)の所有者が存在する可能性があります。そのため、データをインポートする際に、システムは同じ名前ですが所有者が異なるデータベースオブジェクトを別のオブジェクトとして認識し、ターゲットライブラリに新しいオブジェクトを作成し、対応するユーザーアカウントが存在しないため、ユーザーが存在しないというエラーが発生します。したがって、データベースオブジェクトの所有者を統一する必要があります。
いつもの習慣ですが、以下にテーブル、ストアドプロシージャ、およびビューの所有者を変更するための SQL スクリプトを示します。説明する必要があるのは、このスクリプトは同様に、データベースオブジェクトの所有者を DBO ユーザーから他の指定されたユーザーに変更するためにも使用できるということです。使用方法は、YourUserName を DBO に変更し、元の DBO の位置に指定したいユーザーアカウント名を入力し、実行するだけです。もちろん、このスクリプトコードは非常に柔軟であり、DBO と他の指定されたアカウント間の変更にだけ対応しているわけではありません。実際に試してみれば自然に理解できます。
- テーブルの所有者を変更する
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
- ストアドプロシージャの所有者を変更する
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
- ビューの所有者を変更する
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