web-dev-qa-db-fra.com

Comment changer le schéma de base de données en dbo

J'ai importé un tas de tables d'un ancien serveur SQL (2000) dans ma base de données 2008. Toutes les tables importées sont précédées de mon nom d'utilisateur, par exemple: jonathan.MovieData. Dans la table properties, il répertorie jonathan comme schéma de base de données. Lorsque j'écris des procédures stockées, je dois maintenant inclure jonathan. devant tous les noms de table, ce qui prête à confusion.

Comment puis-je changer toutes mes tables pour être dbo au lieu de Jonathan?

Résultat actuel: jonathan.MovieData

Résultat désiré: dbo.MovieData

112
jonathan hall
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;

Voir ALTER SCHEMA .

Syntaxe généralisée:

ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; 
172
Remus Rusanu

Vous pouvez exécuter ce qui suit pour générer un ensemble d’instructions ALTER sCHEMA pour tous vos talbes:

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

Vous devez ensuite copier et exécuter les instructions dans l’analyseur de requêtes.

Voici un script plus ancien qui le fera pour vous aussi, je pense en changeant le propriétaire de l'objet. Je n'ai pas essayé en 2008, cependant.

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

Je l'ai eu de ce site .

Il est également question de faire la même chose pour les processus stockés si vous en avez besoin.

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

Réf.: ALTER SCHEMA

20
Mitch Wheat

Déplacer la table du schéma dbo vers MySchema:

 ALTER SCHEMA MySchema TRANSFER dbo.MyTable


Déplacez la table de MySchema vers le schéma dbo:

 ALTER SCHEMA dbo TRANSFER MySchema.MyTable
13
Neru-J

Je viens de poster ceci à une question similaire: Dans SQL Server 2005, comment puis-je changer le "schéma" d'une table sans perdre aucune donnée?


Une légère amélioration à l'excellente réponse de sAeid ...

J'ai ajouté un exec pour que ce code soit auto-exécuté, et j'ai ajouté une union en haut afin de pouvoir changer le schéma des deux tables ET des procédures stockées:

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

J'ai moi aussi dû restaurer un dbdump et constaté que le schéma n'était pas dbo. J'avais passé des heures à essayer d'obtenir des transferts de données de studio de gestion SQL ou Visual Studio pour modifier le schéma de destination ... J'ai fini par l'exécuter contre le fichier restauré. dump sur le nouveau serveur pour obtenir les choses que je voulais.

8
Lanceomagnifico

Vous pouvez modifier par lots les schémas de plusieurs objets de base de données comme décrit dans cet article:

Comment changer le schéma de toutes les tables, vues et procédures stockées dans MSSQL

5
anar khalilov

Manière de le faire pour une chose individuelle:

modifier le schéma dbo transfer jonathan.MovieData

2
Jon Onstott

J'ai eu un problème similaire, mais mon schéma comportait une barre oblique inverse. Dans ce cas, incluez les crochets autour du schéma.

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

Ouvrez le serveur SQL en tant que SA compte et cliquez sur la nouvelle requête après les requêtes sur les connexions

en cliquant sur Exécuter, tous les schémas possédés reviendront à SA compte

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