Tôi cố gắng để thực hiện các truy vấn sau đây trong SQL server:Làm thế nào để ngắn mạch SQL đâu khoản
declare @queryWord as nvarchar(20) = 'asdas'
SELECT * FROM TABLE_1
WHERE (ISDATE(@queryWord) = 1)
AND TABLE_1.INIT_DATE = CONVERT(Date, @queryWord)
Điều này rõ ràng gây ra một lỗi vì 'asdas' không thể được chuyển đổi sang Date
. Mặc dù, tôi đã mong đợi một hành vi khác. Đó là, bởi vì ISDATE(@queryWord) = 1
là sai, tôi đã mong đợi SQL để không kiểm tra điều kiện thứ hai, nhưng rõ ràng, nó không.
Tôi biết có một số cách khác để thực hiện truy vấn này nhưng đây không phải là câu hỏi của tôi. Tôi tự hỏi nếu có một số cách để không kiểm tra điều kiện thứ hai là điều đầu tiên không thỏa mãn. Tôi tò mò vì tôi nghĩ rằng SQL đã làm điều này.
Bạn không thể ép buộc một thứ tự cụ thể trong việc đánh giá điều kiện AFAIK. –
Có thể trùng lặp: http://stackoverflow.com/questions/381224/sql-server-query-short-circuiting – seekerOfKnowledge
Trả lời cho câu hỏi tôi đã liên kết: http://weblogs.sqlteam.com/mladenp/archive/2008/02 /25/How-SQL-Server-short-circuits-WHERE-condition-evaluation.aspx – seekerOfKnowledge