Tengo 2 comandos y necesito que ambos se ejecuten correctamente o ninguno de ellos se ejecute. Así que creo que necesito una transacción, pero no sé cómo usarla correctamente.
¿Cuál es el problema con el siguiente script?
BEGIN TRANSACTION [Tran1]
INSERT INTO [Test].[dbo].[T1]
([Title], [AVG])
VALUES ('Tidd130', 130), ('Tidd230', 230)
UPDATE [Test].[dbo].[T1]
SET [Title] = N'az2' ,[AVG] = 1
WHERE [dbo].[T1].[Title] = N'az'
COMMIT TRANSACTION [Tran1]
GO
El INSERTcomando se ejecuta, pero el UPDATEcomando tiene un problema.
¿Cómo puedo implementar esto para revertir ambos comandos si alguno de ellos tiene un error en la ejecución?
sql
sql-server
database
tsql
transactions
Saeid
fuente
fuente

BEGIN TRANSACTION [Tran1]debe colocar dentroTRY? De todos modos, una pieza de código muy simple y elegante.Al comienzo del procedimiento almacenado, se debe poner SET XACT_ABORT ON para indicar al servidor SQL que revierta automáticamente la transacción en caso de error. Si se omite o se establece en OFF, es necesario probar @@ ERROR después de cada declaración o usar el bloque de reversión TRY ... CATCH .
fuente
XACT_ABORTEnfoque fácil:
fuente