SQL Server Enterprise Manager - Masse der Tabellen löschen und Ändern von Eigentum der Tabellen
-
03-10-2019 - |
Frage
Ich habe so ziemlich keine Erfahrung mit SQL Server Enterprise Manager, damit ich bin nicht sicher, ob dies überhaupt möglich ist (oder hoffentlich laughably einfach!)
Bei einem Import in eine Datenbank etwas geschehen ist, wo jeder Tisch sich mit zwei wichtigen Unterschieden dupliziert hat.
Das ist zunächst, dass der Besitzer auf beiden Tabellen unterschiedlich ist, die zweite ist, dass nur die Struktur über auf einer der Kopien kopiert hat.
Sod Gesetz darauf hingewiesen, dass natürlich auch die Angaben über die von der falschen Person im Besitz Tabellen gespeichert wurden, so meine Frage ist, kann ich alle Tabellen schnell löschen, indem ein Benutzer gehörten und kann ich schnell das Eigentum an allen anderen Tabellen ändern, um sie zu holen in Zeile.
Es gibt genügend Tische, dass die Automatisierung meine bevorzugte Option wird durch einen langen Weg sein!
Jede Hilfe wäre sehr dankbar, ich bin mit SQL Server 2000
Lösung
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
Andere Tipps
Für Eigentumswechsel finden Sie unter: SQL Tabelle Eigentümerwechsel, schnelle und einfache
Der Code in dem oben angegebenen Link lautet:
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