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

Chèn hàng loạt SQL với mối quan hệ cha / con, thứ tự có được giữ nguyên không?

Tạo hai bảng dàn có cùng cấu trúc với bảng đích của bạn nhưng không sử dụng danh tính trên cột recno.

create table parentTmp (
   recno int,
   groupCode int,
   parentdata varchar(80)
);

create table childTmp (
   parentrecno int not null,
   childdata varchar(80)
)

Tải hàng loạt dữ liệu của bạn vào các bảng dàn, giữ nguyên giá trị recno / parentrecno.

Sau đó, bạn có thể sử dụng hợp nhất đầu ra để di chuyển dữ liệu từ các bảng sắp xếp.

-- Table variable to hold mapping between 
-- SourceRecno and TargetRecno
declare @recno table(SourceRecno int, TargetRecno int);

-- Merge data from parentTmp to parent
-- Output old and new recno to @recno
merge parent T
using parentTmp S
on 0=1
when not matched then
  insert (groupCode, parentdata)
    values (S.groupCode, S.parentData)
output S.recno, inserted.recno into @recno;

-- Copy data from childTmp to child
-- Use @recno to get the new recno
insert into child(parentrecno, childdata)
select R.TargetRecno, C.childdata
from childTmp as C
  inner join @recno as R
    on C.parentrecno = R.SourceRecno;

Điều này sẽ chỉ hoạt động trong SQL Server 2008 (và sau này tôi cho rằng).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bảng tạm thời cục bộ và toàn cầu trong SQL Server

  2. Máy chủ SQL tương đương với GROUP_CONCAT ()

  3. Thực thi các câu lệnh chuẩn bị do NHibernate tạo trong SQL Server Management Studio

  4. cách ly một chuỗi con trong một chuỗi trước một ký hiệu trong SQL Server 2008

  5. Làm cách nào để xác minh rằng không đồng bộ / chờ đợi của tôi đang sử dụng cổng hoàn tất I / O?