2010-03-29 47 views
6

phép nói rằng tôi có một kịch bản như thế:Tắt kiểm tra tập lệnh TSQL?

if (một số điều kiện) bắt đầu chọn somecolumn từ sometable cuối

Cho phép nói, rằng "somecolumn" không tồn tại và tình trạng này không phải là đúng, có nghĩa là lựa chọn là NOT được thi hành. Mặc dù lựa chọn sẽ không được thực thi, kịch bản lệnh không hợp lệ, Management Studio vẫn phàn nàn về cột "somecolumn" bị thiếu.

Câu hỏi: Bằng cách nào đó tôi có thể vô hiệu hóa loại kiểm tra này để tập lệnh được thực thi và vì nếu không đúng, nó sẽ không bao giờ nhận thấy cột bị thiếu?

Cảm ơn :-)

+0

Có điều gì đó nghiêm trọng sai với thiết kế của bạn nếu bạn phải lo lắng về việc liệu một cột có tồn tại hay không. – HLGEM

Trả lời

4

Sử dụng động SQL

if(some condition) 
begin 
    exec ('select somecolumn from sometable') --or sp_executesql 
end 

Nó thực sự làm cho không có ý nghĩa để chạy này vì những gì SQL là. Nó không được thực hiện theo từng dòng: toàn bộ lô được phân tích cú pháp, v.v. trong một lần và lỗi được tạo ra ở đây, trước khi bất cứ điều gì thực sự chạy theo ý nghĩa của bạn. Điều này là do thiết kế ...

+0

+1, duh đánh bại tôi bằng 44 giây !!! –

+0

không 100% Mã này hoạt động cho tôi: NẾU OBJECT_ID ('Reports.dbo.RecordsTable') IS NULL Tuy nhiên các phương pháp khác chỉ với chuỗi tham số đơn giản để chỉ ra bảng 1 hoặc 2 không thành công. Tuy nhiên, thủ thuật sql động luôn hoạt động, nhưng tất nhiên là hơi khó chịu. – regeter

2

Bạn có thể tạo quy trình tham chiếu đến bảng không tồn tại, tuy nhiên đó là ngoại lệ duy nhất cho quy tắc. Từ BOL:

Độ phân giải tên trì hoãn chỉ có thể là được sử dụng khi bạn tham chiếu không tồn tại đối tượng bảng. Tất cả các đối tượng khác phải tồn tại tại thời điểm thủ tục được lưu trữ được tạo. Ví dụ: khi bạn tham chiếu bảng hiện có trong thủ tục được lưu trữ , bạn không thể liệt kê các cột không tồn tại cho bảng đó.

Ngoài việc sử dụng SQL động, không có phương tiện để tham chiếu các cột không tồn tại trong quy trình được lưu trữ.

Các vấn đề liên quan