Transaction với SQL Store

VD:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[TestTransaction]
AS
BEGIN
SET NOCOUNT ON;


SET XACT_ABORT ON  
BEGIN TRAN  
BEGIN TRY  
CREATE TABLE [dbo].[t1](
[id] [int] NULL
) ON [PRIMARY]
INSERT into t1 VALUES(1)
INSERT into t1 VALUES(2)
INSERT into t1 VALUES(3)
COMMIT  
END TRY  
BEGIN CATCH  
  ROLLBACK  
  DECLARE @ErrorMessage VARCHAR(2000)  
  SELECT @ErrorMessage = 'Lỗi: ' + ERROR_MESSAGE()  
  RAISERROR(@ErrorMessage, 16, 1)
END CATCH
END

Đoạn lệnh trên kết hợp transaction với xử lý lỗi.
- Nó bắt đầu bằng việc đặt lựa chọn XACT_ABORT là ON để đảm bảo transaction hoạt động đúng như mong muốn.
- Sau đó là BEGIN TRAN để mở transaction.
- Tiếp đến là BEGIN TRY để mở ra khối try block (giống như try block trong C#)
- Khối try block sẽ chứa các lệnh cần thực hiện trong transaction
- Rồi đến COMMIT để kết thúc transaction và END TRY để kết thúc khối try block
- Sau đó là BEGIN CATCH (giống như catch block trong C#). Đây là phần chứa đoạn lệnh sẽ được thực hiện khi có lỗi trong phần try block.
- Trong phần catch lệnh đầu tiên là ROLLBACK để quay lui transaction.
- Sau đó dùng một biến để chứa thông báo lỗi. Bạn cũng có thể thêm các bước như lưu thông tin về lỗi vào một bảng audit, hoặc gửi email cho DBA…
- Kết thúc là RAISERROR để báo cho ứng dụng biết thủ tục đã gây ra lỗi và truyền thông báo lỗi cho ứng dụng.