SQL Server Enterprise Manager-テーブルの大量削除とテーブルの所有権の変更
-
03-10-2019 - |
質問
SQL Serverのエンタープライズマネージャーの経験はほとんどないので、これが可能であるかどうかはわかりません(または、笑いながら簡単に!)
データベースへのインポート中に、各テーブルが2つの重要な違いでそれ自体を複製した場合に何かが起こりました。
1つ目は、両方のテーブルの所有者が異なることです。2つ目は、コピーの1つにコピーされた構造のみが構造です。
SODの法律は、もちろんデータが間違った人が所有するテーブルに保存されていることを示しているため、私の質問は、1人のユーザーが所有するすべてのテーブルをすばやく削除して、他のすべてのテーブルの所有権をすばやく変更して並べることができます。
自動化が私の好みのオプションになるほど、長い道のりで十分なテーブルがあります!
どんな助けでも大歓迎です、私はSQL Server2000を実行しています
解決
declare @emptyOwner varchar(20)
declare @wrongOwner varchar(20)
declare @emptyOwnerID bigint
declare @wrongOwnerID bigint
declare @tableName nvarchar(255)
set @emptyOwner = 'dbo'
set @wrongOwner = 'guest'
select @emptyOwnerID = (select uid from sysusers where name = @emptyOwner)
select @wrongOwnerID = (select uid from sysusers where name = @wrongOwner)
select name as tableName
into #tempTable
from systables
where type='U'
and exists (select 1 from systables where type = 'U' and uid = @emptyOwnerID)
and exists (select 1 from systables where type = 'U' and uid = @wrongOwnerID)
declare @dynSQL nvarchar(MAX)
declare ownme cursor for
select tableName from #tempTable
open ownme
fetch next from ownme into @tableName
while @@FETCH_STATUS = 0
begin
@dynSQL = 'DROP TABLE [' + @emptyOwner + '].[' + @tableName + ']'
exec(@dynSQL)
@dynSQL = 'sp_changeobjectowner ''[' + @wrongOwner + '].[' + @tableName + ']'',''' + @emptyOwner + ''''
exec(@dynSQL)
fetch next from ownme into @tableName
end
close ownme
deallocate ownme
他のヒント
所有権の変更については、次のことを参照してください。 SQLテーブルの所有権は、迅速かつ簡単です
上記のリンクに記載されているコードは次のとおりです。
DECLARE @old sysname, @new sysname, @sql varchar(1000)
SELECT
@old = 'oldOwner_CHANGE_THIS'
, @new = 'dbo'
, @sql = '
IF EXISTS (SELECT NULL FROM INFORMATION_SCHEMA.TABLES
WHERE
QUOTENAME(TABLE_SCHEMA)+''.''+QUOTENAME(TABLE_NAME) = ''?''
AND TABLE_SCHEMA = ''' + @old + '''
)
EXECUTE sp_changeobjectowner ''?'', ''' + @new + ''''
EXECUTE sp_MSforeachtable @sql
所属していません StackOverflow