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

T-SQL:CTE với các cột nhận dạng

Bạn không thể nắm bắt danh tính đã tạo trong CTE. Tuy nhiên, bạn có thể chèn tất cả các hàng vào bảng đích với null dưới dạng ParentID và sau đó cập nhật ParentID trong một tuyên bố cập nhật riêng biệt. Để làm điều đó, bạn có thể sử dụng merge và một kỹ thuật được mô tả tại đây .

-- Helper table to map new id's from source
-- against newly created id's in target
declare @IDs table
( 
  TargetID int,
  SourceID int,
  SourceParentID int
)

-- Use merge to capture generated id's
merge BillOfMaterials as T
using SourceTable as S
on 1 = 0
when not matched then
insert (SomeColumn) values(SomeColumn)
output inserted.BomId, S.BomID, S.ParentID into @IDs;

-- Update the parent id with the new id
update T
set ParentID = I2.TargetID
from BillOfMaterials as T
  inner join @IDs as I1
    on T.BomID = I1.TargetID
  inner join @IDs as I2
    on I1.SourceParentID = I2.SourceID

Đây là mẫu hoạt động đầy đủ về SE-Data



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giải pháp cho:Cập nhật cửa hàng, chèn hoặc xóa câu lệnh ảnh hưởng đến một số hàng không mong muốn (0)

  2. Làm thế nào để ánh xạ động các cột đầu vào và đầu ra trong SSIS?

  3. Thiếu cấu phần phần mềm com.microsoft.sqlserver:sqljdbc4:jar:4.0

  4. Nhận ngày mới nhất trước giá trị ngày trong hàng

  5. Hàm ROUND () của SQL Server:Điều gì cần làm và Tại sao bạn nên quan tâm?