¿Cuál es la forma correcta de probar las fallas de inserción/actualización y revertir esta transacción si hay alguna? No creo que lo que tengo funcione, ya que mis inserciones/actualizaciones son 3 declaraciones separadas y @@ ROWCOUNT solo reflejará la última instrucción ejecutada.Forma correcta de usar una transacción en varias inserciones o actualizaciones
BEGIN TRANSACTION Script;
GO
INSERT INTO TableA (id) VALUES (1)
INSERT INTO TableB (id) VALUES (1)
UPDATE TableC SET id=1 WHERE id=2
GO
IF (@@ROWCOUNT=3 AND @@ERROR=0)
BEGIN
COMMIT
END
ELSE
BEGIN
PRINT 'Error: Rolling back transaction'
ROLLBACK TRANSACTION Script
END
GO
Esto me limita a imprimir un mensaje de error, ¿verdad? –
@JoePhilllips, por favor revisa mi respuesta actualizada. –
¿El atributo SET XACT_ABORT ON generará un mensaje de error cuando la transacción retroceda? – Raza