sql >> Database teknologi >  >> RDS >> Sqlserver

Kaskade kopi af rækker i sql

Du kan bruge fletningen sætning med output-klausulen for at få et match mellem det gamle og det nye id i spørgsmålet. Dette er beskrevet i dette spørgsmål Brug af merge..output til at få kortlægning mellem source.id og target.id .

I dit tilfælde ville koden se sådan ud. Koden er ikke testet, så der kan være et vilkårligt antal tastefejl derinde, men den viser, hvad du kan gøre.

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. Hvordan kan jeg bruge mySQL replace() til at erstatte strenge i flere poster?

  2. Forespørg MSQL for vindere, startende på xth plads ved hjælp af SELECT

  3. Hvordan får man Django til at fungere med ikke-understøttede MySQL-drivere såsom gevent-mysql eller Concurrence's MySQL-driver?

  4. Hvordan kan jeg vise den fulde tekst af en forespørgsel oprettet af PDO?