Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Групово вмъкване с връзки родител/дете, запазен ли е редът?

Създайте две междинни таблици със същата структура като вашите целеви таблици, но не използвайте идентичност в колона за разпознаване.

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

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

Групово заредете вашите данни в сценичните таблици, като запазите стойностите recno/parentrecno такива, каквито са.

След това можете да използвате обединяване и изход за преместване на данните от междинните таблици.

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

Това ще работи само в SQL Server 2008 (и по-късно предполагам).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Идентификаторът от няколко части не можа да бъде обвързан

  2. Ефективно разрешаване на проблема с базата данни на SQL Server, заседнал в подозрителен режим

  3. Създаване на изглед от свързани дъщерни таблици

  4. Каква е употребата на курсор в SQL Server?

  5. Как да предефинирате колоните, върнати от съхранена процедура в SQL Server