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

सरल अद्यतन विवरण ताकि सभी पंक्तियों को एक अलग मान दिया जा सके

कुछ परीक्षण तालिका पर मेरी ओर से आपकी मूल योजना इस प्रकार दिखती है।

यह केवल एक बार परिणाम की गणना करता है और इसे एक स्पोल में कैश करता है और फिर उस परिणाम को फिर से चलाता है। आप निम्न कोशिश कर सकते हैं ताकि SQL सर्वर सबक्वेरी को सहसंबद्ध के रूप में देखे और प्रत्येक बाहरी पंक्ति के लिए पुनर्मूल्यांकन की आवश्यकता हो।

UPDATE table1
SET    table2Id = (SELECT TOP 1 table2Id
                   FROM   table2
                   ORDER  BY Newid(),
                             table1.table1Id)

मेरे लिए जो बिना स्पूल के यह प्लान देता है।

table1 . से एक अद्वितीय फ़ील्ड पर सहसंबद्ध होना महत्वपूर्ण है हालाँकि, भले ही एक स्पूल जोड़ा गया हो, यह हमेशा रिवाउंड (अंतिम परिणाम को फिर से चलाने) के बजाय रिबाउंड होना चाहिए क्योंकि प्रत्येक पंक्ति के लिए सहसंबंध मान अलग होगा।

यदि टेबल बड़े हैं तो यह धीमा हो जाएगा क्योंकि आवश्यक कार्य दो टेबल की पंक्तियों का एक उत्पाद है (table1 में प्रत्येक पंक्ति के लिए) इसे table2 . का पूरा स्कैन करने की आवश्यकता है )



  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 सर्वर - कुछ शर्तों को पूरा करने वाले कॉलम का चयन करें?

  2. चयन सूची में कहीं और एक उपनाम का संदर्भ लें

  3. SQL सर्वर में सत्र संदर्भ में कुंजी/मान जोड़े सेट करें (sp_set_session_context)

  4. SQL सर्वर 2005 में डायनेमिक कॉलम के साथ क्रॉसस्टैब क्वेरी

  5. क्वेरी प्रोफाइलिंग 101 - हाँ, यह वास्तव में आपके SQL सर्वर प्रदर्शन में सुधार कर सकता है