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

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top