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