Tôi đang làm việc để tối ưu hóa một số thủ tục lưu trữ được sử dụng nhiều và chạy trên một kịch bản đưa ra câu hỏi mà tôi không thể tìm thấy bất kỳ câu trả lời nào: khi đánh giá TSQL trong một thủ tục được lưu trữ, SQL Server có ngắn mạch câu lệnh IF
không?Câu lệnh IF ngắn mạch của SQL Server có phải không?
Ví dụ, giả sử một thủ tục lưu trữ có mã tương tự như:
IF @condition1 = 1
OR EXISTS(SELECT 1 FROM table1 WHERE column1 = @value1)
...
Trong kịch bản này không SQL Server ngắn mạch đánh giá như vậy mà tuyên bố EXISTS
không bao giờ được thực thi khi mệnh đề trước để đánh giá đúng?
Nếu nó không bao giờ hoặc đôi khi chỉ có, thì chúng tôi có một số viết lại trước chúng tôi.
Không được bảo đảm. Kiểm tra kế hoạch thực hiện để xem nó có thực hiện trong trường hợp của bạn hay không. –
Cảm ơn, 'không được bảo đảm' là những gì tôi đang tìm kiếm. Vấn đề là các thủ tục lưu trữ này được thực hiện trên hàng trăm DB khách hàng, vì vậy nếu kế hoạch thực hiện xác định điều này, chúng tôi không thể giả định nó sẽ được đánh giá giống nhau trên mọi hệ thống của khách hàng và cần viết lại. –
Nếu bạn muốn đảm bảo gang thì tách ra thành nhiều câu lệnh 'if' sẽ làm điều đó. Khi [tôi nhìn vào điều này trước khi] (http://stackoverflow.com/a/5543985/73226) Tôi tìm thấy một số ví dụ về nó không ngắn mạch. Bạn cũng có thể xem xét sử dụng báo cáo trường hợp. –