sql >> Database >  >> RDS >> Sqlserver

Cascadekopie van rijen in sql

U kunt de samenvoegen gebruiken statement met de output-clausule om een ​​overeenkomst te krijgen tussen de oude en nieuwe id in vraagText. Dit wordt beschreven in deze vraag Samenvoegen..output gebruiken om een ​​toewijzing te krijgen tussen source.id en target.id .

In jouw geval ziet de code er ongeveer zo uit. De code is niet getest, dus er kunnen een aantal typefouten in zitten, maar het laat zien wat je kunt doen.

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. Geef PHP Array door via jQuery Ajax

  2. PHPExcel zal niet exporteren naar CSV

  3. Hoe de prestaties van de SQL-query invoegen te verbeteren?

  4. Mysql selecteer onderscheiden