Comment puis-je changer db schéma dbo

j'ai importé un tas de tables d'un vieux serveur sql (2000) à ma base de données 2008. Toutes les tables importées sont préfixées avec mon nom d'utilisateur, par exemple: jonathan.MovieData . Dans le tableau properties il indique jonathan comme le schéma de base de données. Quand j'écris des procédures stockées je dois maintenant inclure jonathan. en face de tous les noms de table qui prête à confusion.

Comment changer toutes mes tables pour être dbo au lieu de jonathan?

résultat actuel: jonathan.MovieData

résultat souhaité: dbo.MovieData

110
demandé sur Owen Blacker 2009-07-18 07:07:20

10 réponses

ALTER SCHEMA dbo TRANSFER jonathan.MovieData;

voir ALTER SCHEMA .

Syntaxe Généralisée:

ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; 
168
répondu Remus Rusanu 2016-12-09 10:24:29

vous pouvez exécuter ce qui suit, ce qui générera 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 alors copier et exécuter les déclarations dans l'analyseur de requête.

voici un vieux script qui le fera pour vous aussi, je pense en changeant le propriétaire de l'objet. Je ne l'ai pas essayé en 2008.

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

Obtenu à partir de ce site .

It parle également de faire la même chose pour les procs stockés si vous avez besoin.

38
répondu patmortech 2009-07-18 03:52:13
USE MyDB;
GO
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
GO

Réf: ALTER SCHEMA

20
répondu Mitch Wheat 2009-07-18 03:30:25

déplacer la table du schéma dbo à MySchema:

 ALTER SCHEMA MySchema TRANSFER dbo.MyTable



déplacer la table de MySchema au schéma dbo:

 ALTER SCHEMA dbo TRANSFER MySchema.MyTable
12
répondu Neru-J 2013-05-08 09:29:17

je viens de poster ceci à une question similaire: dans sql server 2005, Comment puis-je changer le" schéma " d'une table sans perdre de données?


A 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 pour que je puisse 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

moi aussi j'ai dû restaurer un dbdump, et j'ai découvert que le schéma n'était pas dbo - j'ai passé des heures à essayer D'obtenir des transferts de données de gestion de Serveur Sql studio ou visual studio pour modifier le schéma de destination... J'ai fini par lancer ça contre le dump restauré sur le nouveau serveur pour obtenir les choses comme je le voulais.

8
répondu Lanceomagnifico 2017-05-23 12:26:19

vous pouvez modifier les schémas de plusieurs objets de base de données comme décrit dans ce post:

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

5
répondu anar khalilov 2017-05-23 12:10:39

façon de le faire pour une chose individuelle:

alter schéma dbo transfert de jonathan.MovieData

2
répondu Jon Onstott 2009-07-18 03:56:03

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

ALTER SCHEMA dbo TRANSFER [DOMAIN\jonathan].MovieData;
2
répondu Hannover Fist 2015-01-29 18:21:40

ms-help: / / MS SQLCC.v9 / MS. SQLSVR.v9.en/tsqlref9/html / 0a760138-460e-410a-a3c1-d60af03bf2ed.htm

ALTER SCHEMA schema_name TRANSFER securable_name

1
répondu 2009-07-18 03:30:10

Ouvrez SQL server en tant que SA compte et cliquez sur nouvelle requête passé le coup de requêtes

que cliquer sur Exécuter, il va faire reculer tous les schema possédés de retour au compte SA

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
répondu Mehdi Jalal 2015-04-28 13:10:30