Sự phụ thuộc của bạn có thể sẽ hoàn toàn vượt qua, nhưng tôi chưa kiểm tra kỹ điều này. Tôi biết rằng trong kịch bản này:
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;
Các khóa ngoại thực sự di chuyển trơn tru hơn tôi mong đợi (với lời cảnh báo mà tôi đang thử nghiệm trên phiên bản gần đây hơn nhiều so với bạn). Nhưng vì mã trong blat.pX
tham chiếu vẫn còn dbo.bar
, rõ ràng đang thực hiện thủ tục:
EXEC blat.pX;
Sẽ mang lại lỗi này:
Msg 208, Cấp 16, Trạng thái 1, Quy trình pX
Tên đối tượng không hợp lệ 'dbo.bar'.
Và các truy vấn phụ thuộc, chẳng hạn như:
SELECT * FROM sys.dm_sql_referenced_entities('blat.pX', N'OBJECT');
Sẽ mang lại lỗi này:
Msg 2020, Cấp 16, Trạng thái 1
Các phụ thuộc được báo cáo cho thực thể "blat.pX" có thể không bao gồm các tham chiếu đến tất cả các cột. Điều này là do thực thể tham chiếu một đối tượng không tồn tại hoặc do lỗi trong một hoặc nhiều câu lệnh trong thực thể. Trước khi chạy lại truy vấn, đảm bảo rằng không có lỗi trong thực thể và tất cả các đối tượng được tham chiếu bởi thực thể tồn tại.
Và truy vấn khung nhìn:
SELECT a, barA FROM blat.vFooBar;
Mang lại những lỗi này:
Msg 208, Cấp 16, Trạng thái 1, Quy trình vFooBar
Tên đối tượng không hợp lệ 'dbo.foo'.
Msg 4413, Cấp 16, Trạng thái 1
Không thể sử dụng chế độ xem hoặc chức năng 'blat.vFoobar' vì lỗi liên kết.
Vì vậy, điều này có thể liên quan đến rất nhiều dọn dẹp. Và sau khi bạn đã sửa tất cả các tham chiếu đối tượng, có thể bạn sẽ muốn biên dịch lại tất cả các mô-đun và làm mới tất cả các khung nhìn trong lược đồ mới. Bạn có thể tạo một tập lệnh cho điều đó khá giống với ví dụ trên.