Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Kaskadierte Kopie von Zeilen in SQL

Sie können die Zusammenführung verwenden -Anweisung mit der Ausgabeklausel, um eine Übereinstimmung zwischen der alten und der neuen ID in questionText zu erhalten. Dies wird in dieser Frage beschrieben Merge..output verwenden, um eine Zuordnung zwischen source.id und target.id zu erhalten .

In Ihrem Fall würde der Code in etwa so aussehen. Der Code ist nicht getestet, daher kann es eine Menge Tippfehler geben, aber er zeigt, was Sie tun können.

create procedure CopyQuestion
  @idtocopy int
as

declare @QuestionID int

insert into question
select Name 
from question 
where ID = @idtocopy

select @QuestionID = scope_identity() 

declare @IDs table (NewQID int, OldQID int)

merge questionText as T
using (select ID, @QuestionID as QuestionID, Field
       from questionText
       where QuestionID = @idtocopy) as S
on 0=1
when not matched then
  insert (QuestionID, Field) values (QuestionID, Field)
output inserted.ID, S.ID   into @IDs;       

insert into options
select 
    I.NewQID,
    O.Field
from options O
  inner join @IDs as I
    on O.QuestionTextID = I.OldQID