Это еще один способ сделать то же самое, немного более на основе набора. В моем примере ниже я использовал временную таблицу для сопоставления идентификаторов между двумя новыми таблицами. Также, пожалуйста, удалите пробелы из имен ваших таблиц (только потому, что вы можете не означать, что вы должны).
CREATE PROCEDURE udf_COPY_QUESTION
@ID_TO_COPY int
as
BEGIN TRANSACTION
BEGIN TRY
DECLARE @NEW_QUESTION_ID INT, @MAX_ID INT
insert into question (name)
select name from question where id = @ID_TO_COPY
SET @NEW_QUESTION_ID = SCOPE_IDENTITY()
SET @MAX_ID =IDENT_CURRENT( 'question text' )
select @NEW_QUESTION_ID AS questionid,
Text,
ROW_NUMBER() OVER (ORDER NAME) + @MAX_ID as new_text_id,
id as old_text_id
INTO #TEMP from [question text]
where questionid = @ID_TO_COPY
insert into [question text] (QuestionID,Text)
select questionid,Text from #TEMP
order by new_text_id
insert into Options (questiontextid, text)
select t.new_text_id,o.Text from options o
inner join #temp t on t.old_text_id = o.questiontextid
COMMIT TRANSACTION
END TRY
BEGIN CATCH
RAISERROR('COPY FAILED',10,1)
ROLLBACK TRANSACTION
END CATCH