Khi tạo một thủ tục được lưu trữ trong SQL Server, bạn được phép tham khảo các bảng không tồn tại. Nhưng, nếu bảng tồn tại thì bất kỳ cột nào bạn tham chiếu trong thủ tục phải tồn tại trong bảng đó ( Độ phân giải tên hoãn lại ).
Có thể hướng dẫn SQL Server trì hoãn độ phân giải tên của tất cả các bảng được tham chiếu trong một quy trình không phân biệt chúng có tồn tại hay không? Tôi muốn giữ kiểm tra cú pháp chung, vì vậy ngay cả khi có thể, việc hack định nghĩa thủ tục được lưu trữ trong bảng hệ thống không phải là một tùy chọn.
Tôi hy vọng yêu cầu của tôi để làm điều này có vẻ hơi lạ , vì vậy đây là một số nền tảng: Tôi tự động tạo định nghĩa bảng và quy trình được lưu trữ từ một ứng dụng được viết bằng C # và tôi rất khó thay đổi mã để đặt hàng các thay đổi khi SQL cần họ Mã của tôi "đảm bảo" rằng lược đồ phù hợp trong một giao dịch, nhưng hiện tại tôi không thể đảm bảo rằng các cột trong bảng được xác định trước khi tôi xác định thủ tục được lưu trữ tham chiếu đến chúng.
Dưới đây là một ví dụ điển hình về SQL được tạo bởi C #, "minh họa" cho vấn đề tôi đang cố gắng giải quyết.
--Say this table already exists.
CREATE TABLE myTable
(
a NVARCHAR(MAX)
)
GO
--My C# code creates something like this
BEGIN TRAN
GO
--the stored procedure gets generated first.
CREATE PROCEDURE mySproc
AS
BEGIN
SELECT a,b FROM myTable
END
--then the table update
ALTER TABLE myTable
ADD b nvarchar(MAX)
COMMIT TRAN
Nó là tốt cho tôi để sửa lỗi này trong mã C #, nhưng tôi hy vọng cho một đơn giản "ma thuật" tinh chỉnh tôi có thể kéo trong SQL. Điều này sẽ tiết kiệm rất nhiều thời gian cho tôi.