Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

क्या MS-SQL AND/OR सशर्त है (शॉर्ट-सर्किट मूल्यांकन करें)?

इस व्यवहार की कोई गारंटी नहीं है।

शॉर्ट सर्किटिंग मूल्यांकन का एक उदाहरण नहीं 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 दिखा रहा है कभी एक्सेस नहीं किया गया था।

यह निष्पादन योजना में विधेय स्थिति से गुजरने के द्वारा कार्यान्वित किया जाता है। यहां उनके बारे में कुछ जानकारी है।

<ब्लॉकक्वॉट>

यदि पासथ्रु विधेय सत्य का मूल्यांकन करता है, तो जॉइन पंक्ति लौटाता है... यदि पासथ्रुप्रेडिकेट असत्य का मूल्यांकन करता है, तो जॉइन सामान्य रूप से आगे बढ़ता है



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर पर INSERT या UPDATE के लिए समाधान

  2. एसक्यूएल में कुल मिनट के लिए डेटाटाइम

  3. SQL सर्वर - SQL सर्वर / T-SQL ट्यूटोरियल भाग 38 में GUI का उपयोग करके कॉलम कैसे बदलें या स्क्रिप्ट बदलें

  4. SQL सर्वर तालिका में मौजूदा कॉलम में डिफ़ॉल्ट बाधा कैसे जोड़ें - SQL सर्वर / TSQL ट्यूटोरियल भाग 91

  5. varchar से int . तक की संख्या वाले कॉलम का प्रकार बदलें