las respuestas vienen en un texto separado por ##@@ delimitando las distintas respuestas, por eso es necesario el while que va recorriendo el string y agregando cada respuesta...
Mi pregunta es, la transaccion escrita como esta, funciona???
quiero que o se agrega la pregunta, las respuestas y la respuesta correcta o nada
Bueno a continuacion les dejo el codigo, desde ya muchisimas gracias a todos
Código:
DROP PROCEDURE sp_ex_insert_question GO CREATE PROCEDURE sp_ex_insert_question /* Inserta una nueva pregunta, sus posibles respuestas y cual es la correcta */ @module_id int, --Modulo al que pertence la pregunta @pregunta varchar, --Pregunta @respuestas varchar(5000), --Respuestas @respuesta_correcta int, --Respuesta correcta @resultado VARCHAR(10) OUTPUT --Primer parámetro de salida AS DECLARE @i int DECLARE @aux varchar(5000) DECLARE @question_id int DECLARE @answer_id int DECLARE @Error int DECLARE @nro_respuesta int BEGIN TRAN /* 1. Agregamos la pregunta */ insert into ex_questions (module_id, [text]) values (@module_id, @pregunta) SET @resultado = 'FALLO PREGUNTA' SET @Error=@@ERROR IF (@Error<>0) GOTO TratarError SET @question_id = SCOPE_IDENTITY() /* Recuperamos el id de la pregunta*/ set @aux = @respuestas set @i = PATINDEX('%##@@%',@aux) set @nro_respuesta = 1 WHILE @i <> 0 Begin /* 2. Insertamos las respuestas */ insert into ex_answers (question_id, [text]) values (@question_id, substring(@aux,1,@i-1)) SET @resultado = 'FALLO RESPUESTAS' SET @Error=@@ERROR IF (@Error<>0) GOTO TratarError /* 3. Si es correcta, agregamos como correcta */ IF @respuesta_correcta = @nro_respuesta /* Recuperamos el id de la respuesta correcta*/ Begin SET @answer_id = SCOPE_IDENTITY() insert into EX_ANSWERS_CORRECTS (QUESTION_ID, ANSWER_ID) values (@question_id, @answer_id) SET @resultado = 'FALLO RESPUESTA CORRECTA' SET @Error=@@ERROR IF (@Error<>0) GOTO TratarError End set @nro_respuesta = @nro_respuesta + 1 set @aux = substring(@aux,@i+4,len(@aux)) set @i = PATINDEX('%##@@%',@aux) End COMMIT TRAN SET @resultado = 'OK' TratarError: If @@Error<>0 BEGIN PRINT 'Ha ecorrido un error. Abortamos la transacción' ROLLBACK TRAN END