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

एसक्यूएल डालने पर अनुक्रम संख्या बढ़ाना

मैं 2005 पर परीक्षण नहीं कर सकता, लेकिन आप चीजों को ठीक करने के लिए सीटीई का उपयोग करने में सक्षम होना चाहिए;

DECLARE @FKID INT
SET @FKID = 1
DECLARE @NEWDATA XML
SET @NEWDATA = '<data><text>three</text><text>four</text><text>five</text></data>'

;WITH cte AS (SELECT @FKID FKID, X.value('.','VARCHAR(10)') a, 
                  ROW_NUMBER() OVER (ORDER BY X) r
             FROM @NEWDATA.nodes('/data/text') AS X(X))
INSERT INTO TEMPTABLE ([FKID], [MYTEXT], [SEQUENCE])
SELECT fkid, a,
  (SELECT ISNULL(MAX([SEQUENCE]),0)+r FROM TEMPTABLE WHERE [FKID]=cte.fkid)
FROM cte;

SELECT * FROM TEMPTABLE;

जो परिणाम देता है:

1    1    one     1
2    1    two     2
3    1    three   3
4    1    four    4
5    1    five    5

अपडेट करें

यदि क्वेरी कभी केवल एक FKID सम्मिलित करेगी, तो निम्न सरलीकृत संस्करण भी काम करेगा (आपकी वर्तमान क्वेरी में आवश्यक परिवर्तन हाइलाइट किए गए हैं):

INSERT INTO #TEMPTABLE ([FKID], [MYTEXT], [SEQUENCE])
SELECT @FKID, 
       X.value('.','VARCHAR(10)'),
       (SELECT ISNULL(MAX([SEQUENCE]),0)+1 FROM #TEMPTABLE WHERE [FKID][email protected])
        + ROW_NUMBER() OVER (ORDER BY (SELECT 1))
FROM @NEWDATA.nodes('/data/text') AS X(X)

(SELECT 1) . का उद्देश्य ROW_NUMBER . में का ORDER BY खंड किसी विशेष आदेश को निर्दिष्ट करने से बचने के लिए है। इसे किसी और चीज़ में बदला जा सकता है (उदाहरण के लिए X.value('.','VARCHAR(10)') ), यदि आवश्यक हो।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 'MOD' एक मान्यता प्राप्त अंतर्निहित फ़ंक्शन नाम नहीं है

  2. SQL सर्वर में कॉलम की लंबाई प्राप्त करने के लिए COL_LENGTH () का उपयोग करें

  3. तालिका मान पैरामीटर के रूप में उपयोग के लिए सामान्यीकृत प्रकार बनाना

  4. SQL सर्वर एजेंट जॉब (T-SQL) के लिए जॉब स्टेप अपडेट करें

  5. SQL डेटाबेस से कनेक्ट करने में असमर्थ - C#, VS2012, SQL Server 2012