SQL Server Enterprise Manager - Mass Supprimer des tableaux et des tableaux Changer de propriétaire
-
03-10-2019 - |
Question
J'ai à peu près pas d'expérience avec Enterprise Manager de SQL Server, donc je ne sais pas si cela est encore possible (ou je l'espère risiblement est simple!)
Lors d'une importation dans une base de données est arrivé quelque chose où chaque table elle-même a dupliqué avec deux différences importantes.
La première est que le titulaire sur les deux tables est différente, la deuxième est que seule la structure a copié à travers sur l'une des copies.
La loi de Sod a indiqué que bien sûr les données ont été stockées sur les tables appartenant à la mauvaise personne, donc ma question est puis-je supprimer rapidement toutes les tables appartenant à un utilisateur et puis-je changer rapidement la propriété de toutes les autres tables pour les amener en ligne.
Il y a assez de tables que l'automatisation va être mon option préférée par un long chemin!
Toute aide serait grandement appréciée, je suis en cours d'exécution SQL Server 2000
La solution
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
Autres conseils
Pour changer la propriété, voir: Table SQL changement de propriété, rapide et facile
Le code donné dans le lien ci-dessus est:
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