sql >> Databáze >  >> RDS >> Sqlserver

Hromadné vložení SQL se vztahy nadřazený/podřízený, je zachováno pořadí?

Vytvořte dvě pracovní tabulky se stejnou strukturou jako vaše cílové tabulky, ale nepoužívejte identitu ve sloupci recno.

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

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

Hromadně načtěte data do pracovních tabulek, přičemž hodnoty recno/parentrecno ponechte tak, jak jsou.

Poté můžete použít sloučit a výstup přesunout data z pracovních tabulek.

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

To bude fungovat pouze v SQL Server 2008 (a předpokládám, že později).



  1. mysql count total z pole s hodnotami oddělenými čárkami

  2. Předejte odlišné hodnoty MySql do řetězce c#

  3. Volejte uloženou proceduru Oracle z Java App pomocí hibernace a fondu připojení c3p0

  4. Přístup k sadám výsledků z uložených procedur Transact-SQL SQL Server