Um Probleme innerhalb einer Stored Procedure abzufangen, gibt es mit MS SQL-Server verschiedene Möglichkeiten:
Variable mit Fehlercode
Die Variable @@ERROR ist nur dann 0, wenn bei der letzten Transaktion kein Fehler passiert ist.
Allerdings hat diese Fehlervariable einen großen Nachteil: Wenn mehrere Transaktionen in einer Prozedur durchgeführt werden, müsste man diese Variable nach jeder Transaktion abfragen.
Zurückgeben kann man die Variable mit
RETURN @@error
am Ende der Prozedur.
Oder man übrigt den Fehlercode an eine selbst definierte Variable:
SELECT @myERROR = @@ERROR
Fehlerbehandlung mit TRY…CATCH (ungetestet)
Eine fortschrittlichere Möglichkeit bieten die Blöcke TRY…CATCH. Dies würde so aussehen:
CREATE PROCEDURE DeleteEmployee ( @EmployeeID INT )
AS
BEGIN TRANSACTION -- Start the transaction
-- Delete the Employee's phone numbers
DELETE FROM EmployeePhoneNumbers
WHERE EmployeeID = @EmployeeID
-- Delete the Employee record
DELETE FROM Employees
WHERE EmployeeID = @EmployeeID
-- See if there is an error
IF @@ERROR <> 0
-- There's an error b/c @ERROR is not 0, rollback
ROLLBACK
ELSE
COMMIT -- Success! Commit the transaction