2011-07-07 6 views
2

SQL Server 2000データベース内のすべてのテーブルとストアドプロシージャの所有者を変更する方法を教えてください。DBOwnerから別のSQL Serverユーザー

私は "sp_changeobjectowner"がそれを実行できると思いますが、これを達成する方法を見つけることができません。

誰でも助けてくれますか?

EDIT

declare 
@old_owner char(45), 
@new_owner char(45) 

set @old_owner = 'dbo' 
set @new_owner = 'mynewuser' 

select 'exec sp_changeobjectowner ''' + replace(@old_owner,' ','') + '.' + t1.name + '''' + char(44) + char(32) + '' + @new_owner + '' + char(13) 
from sysobjects t1, sysusers t2 
where t1.uid = t2.uid 
and t1.name not like 'sys%' 
and t2.uid <> 7 
and t2.name = @old_owner 
+0

更新を参照してください... –

+0

これは間違っていましたか? –

+0

何も間違っていますが、私はまだ私のデータベースのすべての所有者を持っています。 –

答えて

1

あなたが持っているクエリは、そのあなたのすべてのコマンドを持っている結果セットを返します。必要ですが、実際にはそれらのコマンドを実行する必要があります。

結果をコピーし、クエリウィンドウに貼り付け、実行してみます。

0

新しい所有者は、そのデータベース内のユーザーであることを確認してください。

ユーザー名の前に、ドメイン名「domain \ username」を付ける必要があります。

use Northwind 
exec sp_MSforeachtable @command1="sp_changeobjectowner '?', 'domain\username'" 

それともあなたには、いくつかの基準に基づいてのみ変更の所有者に必要がある場合は、カーソルを使用してみてください:

DECLARE tables CURSOR 
FOR 
    SELECT [name] 
     FROM sysobjects 
    WHERE xtype = 'u' 

OPEN tables 
DECLARE @TableName NVARCHAR(512) 
FETCH NEXT FROM tables INTO @TableName 

WHILE @@fetch_status = 0 
BEGIN 

    EXEC sp_changeobjectowner @TableName, 'dbo' 

    FETCH NEXT FROM tables INTO @TableName 
END 
CLOSE tables 
DEALLOCATE tables 
関連する問題