Ihre Abhängigkeiten werden wahrscheinlich völlig aus dem Ruder laufen, aber ich habe dies nicht gründlich getestet. Ich weiß das in diesem Szenario:
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;
Die Fremdschlüssel migrieren tatsächlich reibungsloser als erwartet (mit der Einschränkung, dass ich sie auf einer viel neueren Version als Sie teste). Aber weil der Code blat.pX
immer noch verweist dbo.bar
, wird die Prozedur offensichtlich ausgeführt:
EXEC blat.pX;
Wird diesen Fehler ergeben:
Meldung 208, Ebene 16,
Status 1, Prozedur pX
Ungültiger Objektname 'dbo.bar'.
Und Abhängigkeitsabfragen wie:
SELECT * FROM sys.dm_sql_referenced_entities('blat.pX', N'OBJECT');
Wird diesen Fehler ergeben:
Meldung 2020, Ebene 16,
Status 1
Die für die Entität "blat.pX" gemeldeten Abhängigkeiten enthalten möglicherweise keine Verweise auf alle Spalten. Dies liegt entweder daran, dass die Entität auf ein nicht vorhandenes Objekt verweist, oder an einem Fehler in einer oder mehreren Anweisungen in der Entität. Stellen Sie vor dem erneuten Ausführen der Abfrage sicher, dass die Entität keine Fehler enthält und dass alle Objekte vorhanden sind, auf die die Entität verweist.
Und die Ansicht abfragen:
SELECT a, barA FROM blat.vFooBar;
Ergibt diese Fehler:
Meldung 208, Ebene 16, Status 1, Prozedur vFooBar
Ungültiger Objektname 'dbo.foo'.
Meldung 4413, Ebene 16,
Status 1 Die
Ansicht oder Funktion 'blat.vFoobar' konnte aufgrund von Bindungsfehlern nicht verwendet werden.
Dies könnte also eine Menge Aufräumarbeiten beinhalten. Nachdem Sie alle Objektreferenzen korrigiert haben, möchten Sie wahrscheinlich alle Module neu kompilieren und alle Ansichten im neuen Schema aktualisieren. Sie können dafür ein Skript generieren, das dem obigen Beispiel sehr ähnlich ist.