Trong mã ví dụ của bạn, CTE chỉ tồn tại cho CẬP NHẬT. Nếu bạn cần nó tồn tại lâu hơn, hãy cân nhắc việc điền #tempTable hoặc @tableVariable vào nó, sau đó CẬP NHẬT và XÓA khỏi những thứ đó.
Bạn cũng có thể tăng UPDATE của mình để sử dụng OUTPUT , như sau, để bạn có thể nắm bắt các hàng bị ảnh hưởng. Và sử dụng chúng trong XÓA, như ở đây:
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
ĐẦU RA:
(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)