it-swarm.com.de

Wie ändere ich das DB-Schema in DBO

Ich habe eine Reihe von Tabellen von einem alten SQL Server (2000) in meine Datenbank 2008 importiert. Allen importierten Tabellen wird mein Benutzername vorangestellt, zum Beispiel: jonathan.MovieData. In der Tabelle properties wird jonathan als DB-Schema aufgeführt. Wenn ich gespeicherte Prozeduren schreibe, muss ich jetzt jonathan. vor allen Tabellennamen, was verwirrend ist.

Wie ändere ich alle meine Tische auf dbo anstatt auf jonathan?

Aktuelles Ergebnis: jonathan.MovieData

Erwünschtes Ergebnis: dbo.MovieData

112
jonathan hall
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;

Siehe ALTER SCHEMA .

Verallgemeinerte Syntax:

ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; 
172
Remus Rusanu

Sie können Folgendes ausführen, um eine Reihe von ALTER sCHEMA-Anweisungen für alle Ihre Talbe zu generieren:

SELECT 'ALTER SCHEMA dbo TRANSFER ' + TABLE_SCHEMA + '.' + TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'jonathan'

Anschließend müssen Sie die Anweisungen in den Query Analyzer kopieren und ausführen.

Hier ist ein älteres Skript, das dies auch für Sie erledigt, indem Sie den Objektbesitzer wechseln. Habe es 2008 noch nicht ausprobiert.

DECLARE @old sysname, @new sysname, @sql varchar(1000)

SELECT
  @old = 'jonathan'
  , @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

Habe es von diese Seite .

Es geht auch darum, das Gleiche für gespeicherte Prozesse zu tun, wenn dies erforderlich ist.

38
patmortech
USE MyDB;
GO
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
GO

Ref: ALTER SCHEMA

20
Mitch Wheat

Tabelle vom Dbo-Schema nach MySchema verschieben:

 ALTER SCHEMA MySchema TRANSFER dbo.MyTable


Tabelle von MySchema nach Dbo-Schema verschieben:

 ALTER SCHEMA dbo TRANSFER MySchema.MyTable
13
Neru-J

Ich habe dies gerade auf eine ähnliche Frage gestellt: Wie ändere ich in SQL Server 2005 das "Schema" einer Tabelle, ohne Daten zu verlieren?


Eine leichte Verbesserung der ausgezeichneten Antwort von sAeid ...

Ich habe eine Exec hinzugefügt, um diesen Code selbst ausführen zu lassen, und ich habe oben eine Union hinzugefügt, damit ich das Schema sowohl von Tabellen als auch von gespeicherten 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 dbdump 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.

8
Lanceomagnifico

Sie können Schemata mehrerer Datenbankobjekte stapelweise ändern, wie in diesem Beitrag beschrieben:

Ändern des Schemas aller Tabellen, Ansichten und gespeicherten Prozeduren in MSSQL

5
anar khalilov

Weg, um es für eine einzelne Sache zu tun:

alter schema dbo transfer jonathan.MovieData

2
Jon Onstott

Ich hatte ein ähnliches Problem, aber mein Schema enthielt einen Backslash. Schließen Sie in diesem Fall die Klammern um das Schema ein.

ALTER SCHEMA dbo TRANSFER [DOMAIN\jonathan].MovieData;
2
Hannover Fist

Öffnen Sie den SQL Server als SA account und klicken Sie auf neue Abfrage nach den Blow-Abfragen

wenn Sie auf Ausführen klicken, wird das gesamte Schema auf das Konto SA zurückgesetzt

alter authorization on schema::[db_datareader] to [dbo]
alter authorization on schema::[db_datareader] to [db_datareader]
alter authorization on schema::[db_datawriter] to [dbo]
alter authorization on schema::[db_datawriter] to [db_datawriter]
alter authorization on schema::[db_securityadmin] to [dbo]
alter authorization on schema::[db_securityadmin] to [db_securityadmin]
alter authorization on schema::[db_accessadmin] to [dbo]
alter authorization on schema::[db_accessadmin] to [db_accessadmin]
alter authorization on schema::[db_backupoperator] to [dbo]
alter authorization on schema::[db_backupoperator] to [db_backupoperator]
alter authorization on schema::[db_ddladmin] to [dbo]
alter authorization on schema::[db_ddladmin] to [db_ddladmin]
alter authorization on schema::[db_owner] to [dbo]
alter authorization on schema::[db_owner] to [db_owner]
1
Mehdi Jalal