Peki ya buna - bu bana Jaime Lafargue tarafından söylenen Itzik Ben-Gan tarafından bildirildiği gibi ?
DECLARE @i INT = 1;
SELECT CASE WHEN @i = 1 THEN 1 ELSE MIN(1/0) END;
Sonuç:
Msg 8134, Level 16, State 1, Line 2
Divide by zero error encountered.
Elbette önemsiz geçici çözümler var, ancak mesele hala soldan sağa değerlendirme / kısa devre yaptırmayı her zaman garanti CASE
etmiyor . Burada hatayı bildirdim ve "tasarım tarafından" olarak kapatıldı. Paul White daha sonra bu Connect öğesini dosyaladı ve Fixed olarak kapatıldı. Kendi başlarına çözüldüğü için değil, ancak Books Online'ı, toplamaların bir ifadenin değerlendirme sırasını değiştirebileceği senaryoyu daha doğru bir şekilde açıklayarak güncelledikleri için . Geçenlerde bu konuda daha fazla blog yazdım .CASE
DÜZENLEME sadece Zeyilname, ben bu olduğunu, kenar durumlar olduğunu kabul ederken çoğu zaman sen (belgelerine çelişiyor ve muhtemelen sonunda giderilecektir soldan sağa bunlar değerlendirme ve kısa devre ve bu hataların güvenebilirsiniz bu kesin değil - nedenini görmek için Bart Duncan’ın blog yazısındaki takip eden konuşmaya bakın), millet, bunu ispatlayan tek bir dava olsa bile, her zaman bir şeyin doğru olduğunu söylediğinde aynı fikirde değilim. Eğer Itzik ve diğerleri bu gibi yalnız böcekler bulabilirlerse, en azından başka böceklerin de bulunma ihtimalini mümkün kılar. Ve OP'nin sorgusunun geri kalanını bilmediğimiz için, bu kısa devreye dayanacağına emin olamayacağımızı, ancak bunun tarafından ısırıldığını söyleyemeyiz. Bana göre, daha güvenli bir cevap:
Eğer mümkün olmakla birlikte genellikle itimat CASE
soldan sağa ve kısa devre değerlendirmek için, belgelerinde açıklandığı şekilde, hep bunu yapabilirsiniz demek doğru değildir. Bu sayfada, doğru olmadığı iki kanıtlanmış durum vardır ve hiçbiri SQL Server'ın halka açık sürümlerinde düzeltilmedi.
Buradaki EDITCASE
, hiçbir ifadenin bir araya gelmemesine rağmen, bir ifadenin beklediğiniz sırada değerlendirilmediği başka bir durumdur (bunu durdurmam gerekiyor) .
CASE
hep sol sağa ve her zaman kısa devreleri değerlendirir ).