आपके उदाहरण कोड में, सीटीई केवल अद्यतन के लिए बनी रहती है। यदि आपको इसे लंबे समय तक चलने की आवश्यकता है, तो इसके साथ #tempTable या @tableVariable को पॉप्युलेट करने पर विचार करें, और फिर उनमें से अद्यतन करें और हटाएं।
आप OUTPUT का उपयोग करने के लिए अपने अद्यतन को बढ़ा सकते हैं। क्लॉज, निम्न की तरह, ताकि आप प्रभावित पंक्तियों को कैप्चर कर सकें। और DELETE में उनका उपयोग करें, जैसे यहाँ:
set nocount on
DECLARE @Table table (PK int, col1 varchar(5))
DECLARE @SavedPks table (PK int)
INSERT INTO @Table VALUES (1,'g')
INSERT INTO @Table VALUES (2,'g')
INSERT INTO @Table VALUES (3,'g')
INSERT INTO @Table VALUES (4,'g')
INSERT INTO @Table VALUES (5,'x')
INSERT INTO @Table VALUES (6,'x')
set nocount off
;WITH MYCTE
AS
(
SELECT PK, col1 FROM @Table
)
UPDATE MYCTE
SET col1='xyz'
OUTPUT INSERTED.PK
INTO @SavedPks
WHERE col1='g'
SELECT 'A',* FROM @Table
DELETE @Table
WHERE PK IN (SELECT PK from @SavedPks)
SELECT 'B',* FROM @Table
आउटपुट:
(4 row(s) affected)
PK col1
---- ----------- -----
A 1 xyz
A 2 xyz
A 3 xyz
A 4 xyz
A 5 x
A 6 x
(6 row(s) affected)
(4 row(s) affected)
PK col1
---- ----------- -----
B 5 x
B 6 x
(2 row(s) affected)