Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wstaw SQL Bulk z relacjami nadrzędny/podrzędny, czy kolejność jest zachowana?

Utwórz dwie tabele pomostowe o takiej samej strukturze jak tabele docelowe, ale nie używaj tożsamości w kolumnie rozpoznania.

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

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

Załaduj dane zbiorczo do tabel pomostowych, zachowując wartości recno/parentrecno bez zmian.

Następnie możesz użyć scal i wyjście aby przenieść dane z tabel pomostowych.

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

Będzie to działać tylko w SQL Server 2008 (i przypuszczam, że później).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sformatować datetime jako M/D/RRRR w SQL Server?

  2. Jak rzeczy i „Dla ścieżki XML” działają w programie SQL Server?

  3. Jakie magiczne tabele są dostępne w SQL Server 2000?

  4. Odtwarzanie pliku wideo z obiektu blob serwera sql za pomocą modułu obsługi ashx przy użyciu tagu wideo HTML5

  5. Musisz zadeklarować zmienną skalę