प्रविष्टियों के साथ कैसे ROW_NUMBER उपयोग किया जाता है?

मेरे पास MSSQL सर्वर में मल्टीपे संघ d कथन हैं जो परिणाम के बीच एक अद्वितीय कॉलम ढूंढना बहुत मुश्किल है।

मुझे प्रत्येक पंक्ति के लिए एक अद्वितीय मूल्य होना चाहिए, इसलिए मैंने ROW_NUMBER() फ़ंक्शन का उपयोग किया है।

यह परिणाम सेट अन्य स्थान पर कॉपी किया जा रहा है (वास्तव में एक एसओएलआर सूचकांक)।

अगली बार में मैं वही query चलाउंगा, मुझे केवल नई जोड़े गए पंक्तियों को चुनने की आवश्यकता है। इसलिए, मुझे इसकी पुष्टि करने की आवश्यकता है, नई जोड़े गए पंक्तियों को आखिरी बार अंतिम row_number मान के बाद क्रमांकित किया जाएगा।

In other words, Is the ROW_NUMBER functions orders the results with the insertion order - suppose I don't adding any ORDER BY clause?

यदि नहीं, (जैसा कि मुझे लगता है), क्या कोई विकल्प है?

धन्यवाद।

0

3 उत्तर

;WITH
  cte 
  AS
  (
    SELECT * , rn = ROW_NUMBER() OVER (ORDER BY SomeColumn)
    FROM
    (
    /* Your Union Queries here*/
    )q
  )
  INSERT INTO Destination_Table
SELECT * FROM
CTE  LEFT JOIN Destination_Table
ON CTE.Refrencing_Column = Destination_Table.Refrencing_Column
WHERE Destination_Table.Refrencing_Column IS NULL
0
जोड़ा

एसक्यूएल को देखे बिना मैं केवल सामान्य उत्तर दे सकता हूं कि एमएस एसक्यूएल ऑर्डर क्लॉज के बिना चुनिंदा वक्तव्य के आदेश की गारंटी नहीं देता है, इसका मतलब यह होगा कि row_number प्रविष्टि आदेश नहीं हो सकता है।

0
जोड़ा

मैं सुझाव दूंगा कि आप पंक्ति के समय के साथ 'टाइमस्टैम्पिंग' पर विचार करें। या तालिका में एक पहचान कॉलम जोड़ना।

लेकिन ऐसा लगता है कि आप ऐसा करना चाहते हैं, वर्तमान अधिकतम आईडी प्राप्त करें और उसके बाद row_number जोड़ें।

Select col1, col2, mid + row_number() over(order by smt) id
From (
    Select col1, col2, (select max(id) from tbl) mid
    From query
) t
0
जोड़ा