इस व्यवहार की कोई गारंटी नहीं है।
शॉर्ट सर्किटिंग मूल्यांकन का एक उदाहरण नहीं expr1 AND expr2
. के साथ हो रहा है है
SET STATISTICS IO ON
IF EXISTS(SELECT COUNT(*) FROM master..spt_monitor HAVING COUNT(*)=2)
AND EXISTS (SELECT COUNT(*) FROM master..spt_values HAVING COUNT(*)=1)
PRINT 'Y'
EXISTS(SELECT COUNT(*) FROM master..spt_monitor HAVING COUNT(*)=2)
false
है (अर्थात् And
-ed एक्सप्रेशन false
होना चाहिए ) लेकिन IO परिणाम दिखाते हैं कि दूसरी स्थिति का अभी भी मूल्यांकन किया गया था।
Table 'spt_values'. Scan count 1, logical reads 14, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'spt_monitor'. Scan count 1, logical reads 1, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL सर्वर कर सकते हैं हालांकि यह करो। मैं इसे अपने परीक्षण में देखता हूं
SET STATISTICS IO ON
DECLARE @p1 BIT = NULL
IF ( @p1 = 1
AND EXISTS(SELECT *
FROM master..spt_values) )
PRINT '1'
ELSE IF ( @p1 = 0
AND EXISTS(SELECT *
FROM master..spt_values) )
PRINT '2'
आउटपुट है
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
(1 row(s) affected)
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
(1 row(s) affected)
spt_values
दिखा रहा है कभी एक्सेस नहीं किया गया था।
यह निष्पादन योजना में विधेय स्थिति से गुजरने के द्वारा कार्यान्वित किया जाता है। यहां उनके बारे में कुछ जानकारी है।
<ब्लॉकक्वॉट>यदि पासथ्रु विधेय सत्य का मूल्यांकन करता है, तो जॉइन पंक्ति लौटाता है... यदि पासथ्रुप्रेडिकेट असत्य का मूल्यांकन करता है, तो जॉइन सामान्य रूप से आगे बढ़ता है