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