Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tôi có phải đếm các giao dịch trước khi khôi phục một trong khối bắt trong T-SQL không?

Trên thực tế, tôi không bao giờ bắt đầu một giao dịch mới nếu tôi đã tham gia một giao dịch.

Điều này đề cập đến các procs được lưu trữ lồng nhau, các TXN được phân phối và TransactionScope

Hãy nhớ rằng có không có cái gọi là giao dịch lồng nhau trong SQL Server dù sao.

DECLARE @StartTranCount int

BEGIN TRY
    SET @StartTranCount = @@TRANCOUNT
    IF @StartTranCount = 0 BEGIN TRAN
        -- my code
    IF @StartTranCount = 0 COMMIT TRAN
END TRY
BEGIN CATCH
    IF @StartTranCount = 0 AND @@trancount > 0
    BEGIN
        ROLLBACK TRAN
        DECLARE @message NVARCHAR(MAX)
        DECLARE @state INT
        SELECT @message = ERROR_MESSAGE(), @state = ERROR_STATE()
        RAISERROR (@message, 11, @state)
    END
    /*
    or just
    IF @StartTranCount = 0 AND @@trancount  
        ROLLBACK TRAN
    */
END CATCH


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để có được một danh sách các từ riêng biệt được sử dụng trong tất cả các Bản ghi Trường bằng MS SQL?

  2. Có cách nào tốt để gỡ lỗi Chuỗi hoặc dữ liệu nhị phân sẽ bị cắt bớt không?

  3. Cách thêm số thứ tự cho các nhóm trong truy vấn SQL mà không có bảng tạm thời

  4. Truy cập TimeZoneInfo từ SQL 2005 Server

  5. Cách xem kế hoạch thực thi truy vấn trong Azure Data Studio (SQL Server)