.NET 層有 try/catch,資料層錯誤同樣需妥善處理。
BEGIN TRAN / COMMIT TRAN / ROLLBACK TRAN 確保原子性。BEGIN TRAN
INSERT ...; IF @@ERROR<>0 GOTO ERR
UPDATE ...; IF @@ERROR<>0 GOTO ERR
COMMIT TRAN
RETURN
ERR:
ROLLBACK TRAN
RAISERROR('業務錯誤', 16, 1)
RETURN
BEGIN TRY
BEGIN TRAN
-- 多條 DML
COMMIT TRAN
END TRY
BEGIN CATCH
IF @@TRANCOUNT>0 ROLLBACK TRAN
DECLARE @msg = ERROR_MESSAGE()
RAISERROR(@msg, 16, 1)
END CATCH
集中錯誤處理、自動回滾、錯誤資訊完整保留 (ERROR_NUMBER/SEVERITY/STATE/PROCEDURE/LINE),大幅簡化代碼。