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
10 réponses
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
voir ALTER SCHEMA .
Syntaxe Généralisée:
ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName;
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.
USE MyDB;
GO
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
GO
Réf: ALTER SCHEMA
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
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.
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
façon de le faire pour une chose individuelle:
alter schéma dbo transfert de jonathan.MovieData
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;
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]