Ich habe 2 Befehle und muss beide korrekt ausführen oder keiner von ihnen ausgeführt. Ich glaube, ich brauche eine Transaktion, weiß aber nicht, wie ich sie richtig verwenden soll.
Was ist das Problem mit dem folgenden Skript?
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
Der INSERT
Befehl wird ausgeführt, aber der UPDATE
Befehl hat ein Problem.
Wie kann ich dies implementieren, um beide Befehle zurückzusetzen, wenn einer von ihnen einen Ausführungsfehler aufweist?
sql
sql-server
database
tsql
transactions
Saeid
quelle
quelle
BEGIN TRANSACTION [Tran1]
hineingelegt werdenTRY
? Wie auch immer - sehr einfacher und eleganter Code.Zu Beginn der gespeicherten Prozedur sollte SET XACT_ABORT auf ON gesetzt werden , um SQL Server anzuweisen, die Transaktion im Fehlerfall automatisch zurückzusetzen. Wenn nicht angegeben oder auf AUS gesetzt, muss nach jeder Anweisung @@ ERROR getestet oder der Rollback- Block TRY ... CATCH verwendet werden .
quelle
XACT_ABORT
Einfacher Ansatz:
quelle