Đó là nhưng rõ ràng rằng MS Sql server hỗ trợ lý thuyết ngắn mạch, cải thiện hiệu suất bằng cách tránh kiểm tra không cần thiết,
Hỗ trợ Ví dụ:
SELECT 'TEST'
WHERE 1 = 'A'
SELECT 'TEST'
WHERE 1 = 1 OR 1 = 'A'
Ở đây, ví dụ đầu tiên sẽ cho kết quả vào lỗi ' Chuyển đổi không thành công khi chuyển đổi giá trị varchar 'A' thành kiểu dữ liệu int. '
Trong khi thứ hai chạy dễ dàng như điều kiện 1 = 1 được đánh giá là TRUE và do đó điều kiện thứ hai không chạy chút nào.
Hơn nữa
SELECT 'TEST'
WHERE 1 = 0 OR 1 = 'A'
đây điều kiện đầu tiên sẽ đánh giá false và do đó các DBMS sẽ đi cho điều kiện thứ hai và một lần nữa bạn sẽ nhận được lỗi chuyển đổi như trong ví dụ trên.
Chú ý: Tôi đã viết sai lầm ĐIỀU KIỆN JUST THỰC HIỆN THỜI TIẾT CÁC ĐIỀU KIỆN ĐƯỢC THỰC HIỆN hoặc bị ngắn mạch NẾU kết quả truy vấn LỖI nghĩa là ĐIỀU KIỆN THỰC HIỆN, ngắn mạch KHÁC.
giải thích đơn giản
xem xét,
WHERE 1 = 1 OR 2 = 2
như điều kiện đầu tiên là nhận được đánh giá để TRUE, nó vô nghĩa để đánh giá điều kiện thứ hai vì đánh giá của mình trong bất kỳ giá trị sẽ không ảnh hưởng đến kết quả ở tất cả, do đó, cơ hội tốt cho Sql Server để tiết kiệm thời gian thực hiện truy vấn bằng cách bỏ qua kiểm tra tình trạng không cần thiết hoặc đánh giá.
trong trường hợp "OR" nếu điều kiện đầu tiên được đánh giá để TRUE toàn bộ chuỗi nối với nhau bằng "OR" sẽ coi như đánh giá là true mà không đánh giá người khác.
condition1 OR condition2 OR ..... OR conditionN
nếu điều kiện 1 được đánh giá là đúng, hãy bỏ qua tất cả các điều kiện cho đến khi điều kiệnN bị bỏ qua. Nói cách tổng quát khi xác định TRUE TRUE đầu tiên, tất cả các điều kiện khác được liên kết bởi OR sẽ bị bỏ qua.
Hãy xem xét điều kiện thứ hai
WHERE 1 = 0 AND 1 = 1
như điều kiện đầu tiên là nhận evalutated để FALSE nó vô nghĩa để đánh giá điều kiện thứ hai vì đánh giá của mình trong bất kỳ giá trị sẽ không ảnh hưởng đến kết quả nào cả, vì vậy một lần nữa cơ hội tốt cho Sql Server để tiết kiệm thời gian truy vấn thực thi bằng cách bỏ qua kiểm tra hoặc đánh giá tình trạng không cần thiết.
trong trường hợp "VÀ" nếu điều kiện đầu tiên được đánh giá để FALSE toàn bộ chuỗi kết nối với "VÀ" sẽ được coi là đánh giá để FALSE mà không đánh giá người khác.
condition1 AND condition2 AND ..... conditionN
nếu condition1 được đánh giá để FALSE, nghỉ ngơi tất cả các điều kiện đến conditionN sẽ được bỏ qua. Nói cách tổng quát khi xác định FALSE, tất cả các điều kiện khác được liên kết bởi AND sẽ bị bỏ qua.
do, một lập trình viên WISE NÊN LUÔN Chương trình CHUỖI ĐIỀU KIỆN TRÊN ĐÓ một cách mà, đắt tiền ÍT HAY NHẤT PHẢI LOẠI BỎ ĐIỀU KIỆN được thực thi FIRST, hoặc sắp xếp ĐIỀU KIỆN trong một cách mà có thể mất lợi ích tối đa ngắn mạch
Cảm ơn và Kính trọng,
Rk_Hirpara
có ** có gì đảm bảo ** nào về cách thức và phần nào của một 'tình trạng OR' được đánh giá đầu tiên (hoặc một cao). T-SQL là ** KHÔNG ** như C# theo cách đó. Bạn ** không thể ** dựa vào mạch ngắn boolean. –
'Tại sao? 1 = 1 và @ id = 'x' là true' - nó là ** hoặc ** thực sự, chứ không phải ** và **. –
Ở đây, trong giá trị INSERT @tempTable (id) (1), INTO bị thiếu. – vijay