Anda dapat menggunakan penggabungan pernyataan dengan klausa output untuk mendapatkan kecocokan antara id lama dan baru di questionText. Ini dijelaskan dalam pertanyaan ini Menggunakan merge..output untuk mendapatkan pemetaan antara source.id dan target.id .
Dalam kasus Anda, kodenya akan terlihat seperti ini. Kode tidak diuji sehingga mungkin ada sejumlah kesalahan ketik di sana, tetapi kode ini menunjukkan apa yang dapat Anda lakukan.
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