Bạn có thể tạo các thủ tục được lưu trữ tham chiếu các đối tượng chưa tồn tại (ví dụ: bảng và hàm). Bạn không thể tạo các thủ tục được lưu trữ mà các cột tham chiếu chưa tồn tại trong các đối tượng đã tồn tại. Đây là con dao hai lưỡi của độ phân giải tên bị hoãn - SQL Server mang đến cho bạn lợi ích của sự nghi ngờ trong một số trường hợp, nhưng không phải tất cả. Xem ý tưởng của Erland SET STRICT_CHECKS ON;
để có được một số ý tưởng về địa điểm này hoạt động và địa điểm mà nó phá vỡ:
http://www.sommarskog.se/strict_checks.html
(Và cách anh ấy thích cực đối lập với những gì bạn đang theo đuổi - bạn muốn cho phép mọi thứ được biên dịch bất kể sự tồn tại và anh ấy muốn kiểm tra từng cột hoặc bảng duy nhất.)
Không có thiết lập như SET DEFERRED_NAME_RESOLUTION OFF;
mặc dù nó đã được yêu cầu:
http://connect.microsoft.com/sql/127152
Và không có thiết lập như thế nào IGNORE ALL_RESOLUTION;
.
Bạn có thể giải quyết vấn đề này theo một số cách, bao gồm:
(a) sử dụng SQL động trong (các) thủ tục được lưu trữ bị ảnh hưởng.
(b) xây dựng một sơ khai CREATE PROCEDURE
không có gì trong đó, sau đó chạy phần còn lại của tập lệnh của bạn, sau đó chạy một ALTER PROCEDURE
phần có cơ thể thực (về bản chất, triển khai quy trình theo hai giai đoạn).
(c) làm cho công cụ triển khai của bạn thông minh hơn về thứ tự hoạt động. Nếu thay đổi bảng yêu cầu sự hiện diện của hàm, kịch bản những thay đổi đó sẽ kéo dài. Các công cụ so sánh lược đồ như So sánh SQL của RedGate khá tốt về việc tạo tập lệnh cho bạn theo thứ tự phụ thuộc phù hợp. Bạn không đề cập đến công cụ nào bạn đang sử dụng, nhưng nếu nó không làm điều này ...
(d) Martin Smith có một cách giải quyết thú vị ở đây , nhưng tôi chưa chơi với nó.