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

SQL सर्वर 2005 ROW_NUMBER () बिना ORDER BY

आप निम्नानुसार स्पष्ट आदेश निर्दिष्ट करने से बच सकते हैं:

INSERT dbo.TargetTable (ID, FIELD)
SELECT
   Row_Number() OVER (ORDER BY (SELECT 1))
      + Coalesce(
         (SELECT Max(ID) FROM dbo.TargetTable WITH (TABLOCKX, HOLDLOCK)),
         0
      ),
   FieldValue
FROM dbo.SourceTable
WHERE {somecondition};

हालांकि, कृपया ध्यान दें कि यह केवल एक आदेश निर्दिष्ट करने से बचने का एक तरीका है और गारंटी नहीं देता कि किसी भी मूल डेटा ऑर्डरिंग को संरक्षित किया जाएगा। ऐसे अन्य कारक हैं जो परिणाम को आदेशित करने का कारण बन सकते हैं, जैसे ORDER BY बाहरी क्वेरी में। इसे पूरी तरह से समझने के लिए, किसी को यह महसूस करना चाहिए कि "आदेश नहीं दिया गया (एक विशेष तरीके से)" अवधारणा "मूल आदेश बनाए रखना" (जिसे एक विशेष तरीके से आदेश दिया गया है!) के समान नहीं है। मेरा मानना ​​है कि एक शुद्ध संबंधपरक डेटाबेस परिप्रेक्ष्य से, बाद की अवधारणा अस्तित्व में नहीं है , परिभाषा के अनुसार (यद्यपि ऐसे डेटाबेस कार्यान्वयन हो सकते हैं जो इसका उल्लंघन करते हैं, SQL सर्वर उनमें से एक नहीं है)।

लॉक संकेतों का कारण उस मामले को रोकना है जहां कुछ अन्य प्रक्रिया उस मूल्य का उपयोग करके सम्मिलित होती है जिसे आप उपयोग करने की योजना बना रहे हैं, क्वेरी निष्पादन के कुछ हिस्सों के बीच।

नोट:बहुत से लोग (SELECT NULL) . का उपयोग करते हैं "विंडोिंग फ़ंक्शन के खंड द्वारा ऑर्डर में अनुमति नहीं है" प्रतिबंध के आसपास पाने के लिए। किसी कारण से, मुझे पसंद है 1 NULL . से अधिक ।

साथ ही:मुझे लगता है कि एक पहचान कॉलम बहुत बेहतर है और इसके बजाय इसका इस्तेमाल किया जाना चाहिए। समेकन के लिए संपूर्ण तालिकाओं को विशेष रूप से लॉक करना अच्छा नहीं है। अंडरस्टेटमेंट।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल सर्वर 2008 में एक्सएमएल को सी # से संग्रहीत प्रक्रिया में कैसे पास करें?

  2. SQL सर्वर में डेटाबेस चेकप्वाइंट

  3. SQL सर्वर में CASE एक्सप्रेशन का उपयोग करना

  4. RODBC odbcDriverConnect () कनेक्शन त्रुटि

  5. एसक्यूएल कास्ट डेटाटाइम