Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

tại sao tôi không thể truy cập CTE của mình sau khi tôi đã sử dụng nó một lần?

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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ẩn phiên bản SQL Server trên toàn mạng

  2. Đặt phần thời gian của một biến datetime

  3. SQL Spatial polygon từ trong ra ngoài

  4. Chỉ mục Clustered và Non-Clustered thực sự có nghĩa là gì?

  5. Cách hiển thị ngày ở định dạng ngày của Hoa Kỳ trong SQL Server (T-SQL)