Eu tenho 2 comandos e preciso que ambos sejam executados corretamente ou nenhum deles seja executado. Acho que preciso de uma transação, mas não sei como usá-la corretamente.
Qual é o problema com o seguinte 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
O INSERT
comando é executado, mas o UPDATE
comando tem um problema.
Como posso implementar isso para reverter os dois comandos, se algum deles tiver um erro na execução?
sql
sql-server
database
tsql
transactions
Saeid
fonte
fonte
BEGIN TRANSACTION [Tran1]
ser colocado dentroTRY
? Enfim - código muito simples e elegante.No início do procedimento armazenado, deve-se colocar SET XACT_ABORT ON para instruir o Sql Server a reverter automaticamente a transação em caso de erro. Se omitido ou definido como OFF, é necessário testar @@ ERROR após cada instrução ou usar o bloco de reversão TRY ... CATCH .
fonte
XACT_ABORT
Abordagem fácil:
fonte