मैं 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]example@sqldat.com)
+ 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)') ), यदि आवश्यक हो।