Ich habe eine Tabelle, die in das Schema "db_owner" aufgenommen wurde, und ich brauche sie im Schema "dbo".
Gibt es ein Skript oder einen Befehl zum Umschalten?
sql-server
database
Entwicklung von Chris
quelle
quelle
Antworten:
In SQL Server Management Studio:
quelle
ALTER SCHEMA [NewSchema] TRANSFER [OldSchema].[Table1]
quelle
OldSchema.Table1
nach umzubenennenNewSchema.Table1
.Alle
TABLE_SCHEMA
anzeigen durch diese Auswahl:SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
Mit dieser Abfrage können Sie das gesamte Schema für alle Tabellen in das dbo-Tabellenschema ändern:
DECLARE cursore CURSOR FOR SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA <> 'dbo' DECLARE @schema sysname, @tab sysname, @sql varchar(500) OPEN cursore FETCH NEXT FROM cursore INTO @schema, @tab WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = 'ALTER SCHEMA dbo TRANSFER ' + @schema + '.' + @tab PRINT @sql FETCH NEXT FROM cursore INTO @schema, @tab END CLOSE cursore DEALLOCATE cursore
quelle
PRINT @sql
dass geändert werden sollte, umEXEC(@sql)
einfache Antwort
Sie müssen nicht alle Verbindungen zur Datenbank beenden, dies kann im laufenden Betrieb erfolgen.
quelle
Eine leichte Verbesserung der hervorragenden Antwort von sAeid ...
Ich habe eine Exec hinzugefügt, damit sich dieser Code selbst ausführt, und oben eine Union hinzugefügt, damit ich das Schema beider Tabellen UND gespeicherter Prozeduren ändern kann:
DECLARE cursore CURSOR FOR select specific_schema as 'schema', specific_name AS 'name' FROM INFORMATION_SCHEMA.routines WHERE specific_schema <> 'dbo' UNION ALL SELECT TABLE_SCHEMA AS 'schema', TABLE_NAME AS 'name' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA <> 'dbo' DECLARE @schema sysname, @tab sysname, @sql varchar(500) OPEN cursore FETCH NEXT FROM cursore INTO @schema, @tab WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = 'ALTER SCHEMA dbo TRANSFER [' + @schema + '].[' + @tab +']' PRINT @sql exec (@sql) FETCH NEXT FROM cursore INTO @schema, @tab END CLOSE cursore DEALLOCATE cursore
Auch ich musste einen Datenbankspeicherauszug wiederherstellen und stellte fest, dass das Schema nicht dbo war. Ich habe stundenlang versucht, Sql Server Management Studio- oder Visual Studio-Datenübertragungen zu erhalten, um das Zielschema zu ändern Dump auf dem neuen Server, um die Dinge so zu bekommen, wie ich es wollte.
quelle
Wenn ich SQL Management Studio verwende, erhalte ich nicht die Option "Ändern", sondern nur "Design" oder "Bearbeiten". Wenn Sie über Visual Studio verfügen (ich habe VS.NET 2003, 2005 und 2008 überprüft), können Sie das Schema mit dem Server-Explorer ändern. Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie "Designtabelle" (2008) oder "Tabellendefinition öffnen" (2003, 2005). Markieren Sie die vollständige Spalte "Spaltenname". Sie können dann mit der rechten Maustaste klicken und "Eigenschaftenseiten" oder "Eigenschaften" (2008) auswählen. Auf dem Eigenschaftenblatt sollten Sie den 'Eigentümer' (2003 & 2005) oder 'Schema' (2008) mit einer Dropdown-Liste für mögliche Schemata sehen.
quelle
Ich verwende dies für Situationen, in denen sich eine Reihe von Tabellen in einem anderen Schema befinden müssen, in diesem Fall im dbo-Schema.
declare @sql varchar(8000) ; select @sql = coalesce( @sql, ';', '') + 'alter schema dbo transfer [' + s.name + '].[' + t.name + '];' from sys.tables t inner join sys.schemas s on t.[schema_id] = s.[schema_id] where s.name <> 'dbo' ; exec( @sql ) ;
quelle
Sie müssen zuerst alle Verbindungen zur Datenbank beenden und den Besitz der Tabellen 'db_owner' ändern, indem Sie den Befehl ausführen
wo ? ist der Tabellenname.
quelle