Mam 2 polecenia i potrzebuję, aby oba zostały wykonane poprawnie lub żadne z nich nie zostało wykonane. Myślę więc, że potrzebuję transakcji, ale nie wiem, jak prawidłowo z niej korzystać.
W czym problem z następującym skryptem?
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
INSERT
Polecenie jest wykonywane, ale UPDATE
komenda ma problem.
Jak mogę to zaimplementować, aby wycofać oba polecenia, jeśli któreś z nich ma błąd w wykonywaniu?
sql
sql-server
database
tsql
transactions
Saeid
źródło
źródło
BEGIN TRANSACTION [Tran1]
być umieszczony w środkuTRY
? W każdym razie - bardzo prosty i elegancki fragment kodu.Na początku procedury składowanej należy ustawić SET XACT_ABORT ON, aby poinstruować serwer Sql, aby automatycznie wycofał transakcję w przypadku błędu. Jeśli zostaniesz zwolniony lub ustawiony na WYŁ., Po każdej instrukcji należy przetestować @@ BŁĄD lub użyć SPRÓBUJ ... Cofnij blok wycofania .
źródło
XACT_ABORT
Łatwe podejście:
źródło