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

Sử dụng CTE như một vòng lặp khối?

Nói chung là bạn không thể.

Nó chỉ có giá trị cho câu lệnh tiếp theo. Bạn có thể xác định một chế độ xem với cùng một định nghĩa nếu bạn muốn sử dụng lại định nghĩa cho nhiều câu lệnh hoặc tự cụ thể hóa nó thành một bảng / biến bảng tạm thời để sử dụng lại kết quả .

Đối với trường hợp cụ thể trong câu hỏi của bạn, bạn có thể thực hiện tất cả trong một tuyên bố.

WITH cte
     AS (SELECT 1 AS n
         UNION ALL
         SELECT n + 1
         FROM   cte
         WHERE  n + 1 <= 10)
INSERT INTO tbl1
            (id)
OUTPUT      INSERTED.id
INTO tbl2(id)
SELECT n
FROM   cte 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi ‘datetime2’ thành ‘datetimeoffset’ trong SQL Server (Ví dụ T-SQL)

  2. Xây dựng danh sách động các giá trị câu lệnh INSERT

  3. Danh sách các định dạng ngày có sẵn với CONVERT () trong SQL Server

  4. Sự cố chuyển đổi dữ liệu trong gói SSIS - Văn bản thành GUID

  5. Thêm một hàng tóm tắt với tổng số