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

कर्सर का उपयोग किये बिना टीएसक्यूएल में टेबल वैरिएबल के माध्यम से लूप करने का कोई तरीका है?

सबसे पहले आपको पूरी तरह से सुनिश्चित होना चाहिए कि आपको प्रत्येक पंक्ति के माध्यम से पुनरावृति करने की आवश्यकता है - सेट आधारित संचालन हर मामले में तेजी से प्रदर्शन करेंगे और सामान्य रूप से सरल कोड का उपयोग करेंगे।

आपके डेटा के आधार पर केवल SELECT . का उपयोग करके लूप करना संभव हो सकता है नीचे दिखाए गए बयान:

Declare @Id int

While (Select Count(*) From ATable Where Processed = 0) > 0
Begin
    Select Top 1 @Id = Id From ATable Where Processed = 0

    --Do some processing here

    Update ATable Set Processed = 1 Where Id = @Id 

End

एक अन्य विकल्प अस्थायी तालिका का उपयोग करना है:

Select *
Into   #Temp
From   ATable

Declare @Id int

While (Select Count(*) From #Temp) > 0
Begin

    Select Top 1 @Id = Id From #Temp

    --Do some processing here

    Delete #Temp Where Id = @Id

End

आपको जो विकल्प चुनना चाहिए वह वास्तव में आपके डेटा की संरचना और मात्रा पर निर्भर करता है।

नोट: यदि आप SQL सर्वर का उपयोग कर रहे हैं तो आपको निम्न का उपयोग करके बेहतर सेवा दी जाएगी:

WHILE EXISTS(SELECT * FROM #Temp)

COUNT Using का उपयोग करना तालिका में प्रत्येक पंक्ति को स्पर्श करना होगा, EXISTS केवल पहले वाले को छूने की जरूरत है (नीचे जोसेफ का जवाब देखें)।



  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 सर्वर लॉग शिपिंग और डिजास्टर रिकवरी इंस्टाल और कॉन्फ़िगरेशन -3

  2. मैं क्लॉज में उपनाम का उपयोग कैसे करूं?

  3. SQL सर्वर - सभी गैर-मुद्रण योग्य ASCII वर्णों को हटा दें

  4. SSIS एक्सेल इम्पोर्ट फोर्सिंग गलत कॉलम टाइप

  5. SQL सर्वर नवीनतम संस्करण, संस्करण और SQL सर्वर इतिहास