Vos dépendances seront probablement complètement hors de contrôle, mais je n'ai pas testé cela à fond. Je sais que dans ce scénario:
CREATE SCHEMA blat AUTHORIZATION dbo;
GO
CREATE TABLE dbo.foo(a INT PRIMARY KEY);
CREATE TABLE dbo.bar(a INT FOREIGN KEY REFERENCES dbo.foo(a));
GO
CREATE PROCEDURE dbo.pX AS
BEGIN
SET NOCOUNT ON;
SELECT a FROM dbo.bar;
END
GO
CREATE VIEW dbo.vFooBar
AS
SELECT foo.a, bar.a AS barA
FROM dbo.foo
INNER JOIN dbo.bar
ON foo.a = bar.a;
GO
ALTER SCHEMA blat TRANSFER dbo.foo;
ALTER SCHEMA blat TRANSFER dbo.bar;
ALTER SCHEMA blat TRANSFER dbo.pX;
ALTER SCHEMA blat TRANSFER dbo.vFooBar;
Les clés étrangères migrent en fait plus facilement que prévu (avec la mise en garde que je teste sur une version beaucoup plus récente que vous). Mais parce que le code fait blat.pX
toujours référence dbo.bar
, exécutant évidemment la procédure:
EXEC blat.pX;
Va produire cette erreur:
Msg 208, niveau 16, état 1, procédure pX
Nom d'objet non valide 'dbo.bar'.
Et les requêtes de dépendance, telles que:
SELECT * FROM sys.dm_sql_referenced_entities('blat.pX', N'OBJECT');
Donnera cette erreur:
Msg 2020, niveau 16, état 1
Les dépendances signalées pour l'entité "blat.pX" peuvent ne pas inclure de références à toutes les colonnes. Cela est dû au fait que l'entité fait référence à un objet qui n'existe pas ou à cause d'une erreur dans une ou plusieurs instructions de l'entité. Avant de réexécuter la requête, assurez-vous qu'il n'y a pas d'erreur dans l'entité et que tous les objets référencés par l'entité existent.
Et interroger la vue:
SELECT a, barA FROM blat.vFooBar;
Donne ces erreurs:
Msg 208, niveau 16, état 1, procédure vFooBar
Nom d'objet non valide 'dbo.foo'.
Msg 4413, niveau 16, état 1
Impossible d'utiliser la vue ou la fonction «blat.vFoobar» en raison d'erreurs de liaison.
Donc, cela pourrait impliquer beaucoup de nettoyage. Et après avoir corrigé toutes les références d'objet, vous souhaiterez probablement recompiler tous les modules et actualiser toutes les vues dans le nouveau schéma. Vous pouvez générer un script pour cela assez similaire à l'exemple ci-dessus.