J'ai une table qui est entrée dans le schéma "db_owner" et j'en ai besoin dans le schéma "dbo".
Existe-t-il un script ou une commande à exécuter pour le basculer?
Dans SQL Server Management Studio:
ALTER SCHEMA [NewSchema] TRANSFER [OldSchema].[Table1]
Montre tout TABLE_SCHEMA
par ce choix:
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
Vous pouvez utiliser cette requête pour changer tout le schéma de toutes les tables en schéma de table dbo:
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
réponse simple
sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'
vous n'avez pas besoin d'arrêter toutes les connexions à la base de données, cela peut être fait à la volée.
A légère amélioration de l'excellente réponse de sAeid ...
J'ai ajouté un exécutable pour que ce code s'exécute automatiquement, et j'ai ajouté une union en haut pour 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
Moi aussi, j'ai dû restaurer un dbdump, et j'ai constaté que le schéma n'était pas dbo - j'ai passé des heures à essayer d'obtenir Sql Server Management Studio ou des transferts de données Visual Studio pour modifier le schéma de destination ... vidage sur le nouveau serveur pour obtenir les choses comme je le voulais.
Lorsque j'utilise SQL Management Studio, je n'obtiens pas l'option "Modifier", uniquement "Conception" ou "Édition". Si vous avez Visual Studio (j'ai vérifié VS.NET 2003, 2005 et 2008), vous pouvez utiliser l'Explorateur de serveurs pour modifier le schéma. Faites un clic droit sur le tableau et sélectionnez "Design Table" (2008) ou "Open Table Definition" (2003, 2005). Mettez en surbrillance la colonne complète "Nom de la colonne". Vous pouvez ensuite cliquer avec le bouton droit de la souris et sélectionner "Pages de propriétés" ou Propriétés (2008). Dans la feuille de propriétés, vous devriez voir le "Propriétaire" (2003 et 2005) ou le "Schéma" (2008) avec une liste déroulante pour les schémas possibles.
J'utilise ceci pour des situations où un groupe de tables doit être dans un schéma différent, dans ce cas le schéma dbo.
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 )
;