Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Sisipkan SQL Massal dengan hubungan orang tua/anak, apakah pesanan dipertahankan?

Buat dua tabel staging dengan struktur yang sama dengan tabel target Anda tetapi jangan gunakan identitas pada kolom recno.

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

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

Muat data Anda secara massal ke tabel staging, menjaga nilai recno/parentrecno apa adanya.

Kemudian Anda dapat menggunakan merge dan keluaran untuk memindahkan data dari tabel staging.

-- 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;

Ini hanya akan berfungsi di SQL Server 2008 (dan kemudian saya kira).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Memeriksa apakah Kolom yang Dihitung "Bertahan" di SQL Server

  2. Kembalikan Informasi Kolom dari Server Tertaut di SQL Server (Contoh T-SQL)

  3. Cara Mengimpor Database SQL Server ke Access 2016

  4. Prosedur Tersimpan Sql Dengan Banyak Parameter

  5. Jika tidak ada gagal pada SQL CE