Beispiel:
Mehrere Anweisungen in einer Transaktion kapseln 1. Dieses Beispiel zeigt wie man richtig mehrere Anweisung in eine Transaktion kapselt und diese
bei einem Fehler zurücksetzt.
DECLARE @intErrorCode INT
BEGIN TRAN T1
DELETE FROM PM_PARTNER
WHERE CU_ID = '1'
SELECT @intErrorCode = ERROR
IF (@intErrorCode <> 0) GOTO PROBLEM
INSERT INTO pm_partner
(cu_id, CU_CUSTOM_INITIALS)
VALUES(newid(), 'KYO')
SELECT @intErrorCode =
ERROR
IF (@intErrorCode <> 0) GOTO PROBLEM
COMMIT TRAN T1
PROBLEM:
IF (@intErrorCode <> 0) BEGIN
ROLLBACK TRAN T1
END
Vorsicht:
Wenn dies nicht richtig gemacht wird kann es sein dass trotz Fehlers Teile der SQL Anweisung ausgeführt werden. Falls die Anweisung zweimal
hintereinander aufgerufen werden sollte, müssen sie ein “GO” am Ende hinzufügen, damit der Server die Anweisung teilen kann.
Beispiel 2:
NUR AB SQL 2005
BEGIN TRY
BEGIN TRAN T1
DELETE FROM
dbo.CPI_perZustellung
WHERE
ZUS_Datum = '20090101' AND
ZUS_GUID = '123'
Adresse loeschen NUR wenn 1 verweis uaf die adresse existiert
IF (
SELECT
COUNT(*)
FROM
dbo.CPI_perzustellung
WHERE
ZUS_Datum = '20090101' AND
ADR_GUID = '123'
) =1
DELETE FROM dbo.CPI_perAdresse WHERE ADR_GUID = '123'
COMMIT TRAN T1
END TRY
BEGIN CATCH
ROLLBACK TRAN T1
END CATCH
Achtung! Funktioniert erst ab SQL Server 2005.