sql >> Databasteknik >  >> RDS >> Sqlserver

Kaskadkopia av rader i sql

Du kan använda sammanfogningen sats med output-satsen för att få en matchning mellan det gamla och nya ID:t i frågaText. Detta beskrivs i denna fråga Använda merge..output för att få mappning mellan source.id och target.id .

I ditt fall skulle koden se ut ungefär så här. Koden är inte testad så det kan finnas hur många stavfel som helst där men den visar vad du kan göra.

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. Summa php-array (skapad från mysql-resultat) beroende på mysql-värden i en annan mysql-kolumn

  2. skapa unika sidtitel slugs php

  3. Generera klass från databastabell

  4. Hur hittar man aktuell transaktionsnivå?