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 INSERT
comando se ejecuta, pero el UPDATE
comando 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_ABORT
Enfoque fácil:
fuente