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

यदि एक ही कथन में दो बार उपयोग किया जाता है तो क्या GETUTCDATE() वही मान लौटाएगा?

जीबीएन द्वारा प्रदान किए गए लिंक के लिए धन्यवाद, मुझे विश्वास है कि यह मेरे प्रश्न का उत्तर देता है:

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

रैंड () के साथ आम तौर पर इसका मूल्यांकन प्रति कॉलम में एक बार किया जाता है लेकिन एक बार मूल्यांकन किए जाने पर सभी पंक्तियों के लिए समान रहता है .... वास्तविक निष्पादन योजना में ComputeScalar ऑपरेटर गुणों को देखें, आप देखेंगे कि GetDate() का मूल्यांकन दो बार किया जाता है।

मैंने जाँच की, और ऐसा प्रतीत होता है कि यह अभी भी SQL Server 2008 में उसी तरह होता है:GetUtcDate() निष्पादन योजना में दो बार मूल्यांकन किया जाता है। यह प्रति पंक्ति अलग-अलग परिणाम नहीं देगा, लेकिन यह संभव है कि यदि समय सही हो तो यह प्रति कॉलम एक अलग परिणाम उत्पन्न कर सकता है।

संपादित करें

मैं वास्तव में इस व्यवहार को साबित कर सकता हूं! इसे आजमाएं:

select GETUTCDATE(), RAND(), RAND(), ...[~3000 RAND()s]..., RAND(), GETUTCDATE()
from [TableOfYourChoice]

अपने प्रयोग में, मैं 2011-05-17 20:47:34.247 . के साथ समाप्त हुआ पहले कॉलम में और 2011-05-17 20:47:34.250 अंतिम कॉलम में, सभी RAND() के मूल्यांकन के परिणामस्वरूप तीन मिलीसेकंड का अंतर दिखा रहा है GETUTCDATE() को पहली और दूसरी कॉल के बीच।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पैरामीटरयुक्त क्वेरी गैर-पैरामीटरयुक्त क्वेरी बनाम अत्यधिक धीमी क्वेरी योजना क्यों उत्पन्न करती है

  2. SQL सर्वर (T-SQL) में एक बाधा कैसे छोड़ें

  3. एक SQL सर्वर में एम्परसेंड (&) ऑपरेटर जहां क्लॉज

  4. SQL सर्वर में TRY_CAST () कैसे काम करता है

  5. संदिग्ध मोड में फंसे SQL सर्वर डेटाबेस को प्रभावी ढंग से हल करें