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

Kaskádová kopie řádků v sql

Můžete použít sloučení příkaz s výstupní klauzulí, abyste získali shodu mezi starým a novým ID v questionText. To je popsáno v této otázce Použití merge..output k získání mapování mezi source.id a target.id .

Ve vašem případě by kód vypadal asi takto. Kód není testován, takže v něm může být mnoho překlepů, ale ukazuje, co můžete udělat.

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


  1. PHP ORA-01745:neplatný název proměnné hostitele/vazby Varování

  2. MySQL Group Výsledky podle dne pomocí časového razítka

  3. Jak reprezentovat mnoho podobných atributů entity v databázi?

  4. postgresql kombinující několik období do jednoho