11

Tôi muốn biết thời tiết hay không có thể ngăn chặn một giao dịch bên trong một thủ tục lưu sẵn SQL. Tôi có tình huống sau đây trong SP của tôi (mà tôi muốn đạt được):Ngăn chặn giao dịch trong thủ tục được lưu trữ

WHILE TRUE 
BEGIN TRY 
    BEGIN TRANSACTION A 
    RECEIVE MESSAGE FROM SSB QUEUE WITH TIMEOUT 

    BEGIN SUPPRESS TRANSACTION 
     WHILE RECORD IN TABLE 
     BEGIN TRANSACTION B 
      DELETE RECORD FROM TABLE OUTPUT RECORD INTO D 
      SEND RECORD D TO OTHER SSB QUEUE 
     COMMIT TRANSACTION B 
    END SUPPRESS TRANSACTION 
    COMMIT TRANSACTION A 
END TRY 
BEGIN CATCH 
    ROLLBACK TRANSACTION A 
END CATCH 

vì vậy những gì tôi thực sự muốn làm là giao dịch B không được gia nhập trong giao dịch A :)

+0

Thời điểm tốt thưa ngài, tôi vừa mới đăng bài này ... và có vẻ như đang làm việc trên một vấn đề rất giống với mã của bạn :) – amarsuperstar

Trả lời

10

Bạn mô tả một "giao dịch tự trị", đó là một câu hỏi phổ biến từ những người di chuyển từ Oracle (hỗ trợ họ) sang MSSQL (mà không có). This article giải thích các tùy chọn khác nhau, mà tiếc là không đặc biệt hấp dẫn:

  1. Một loopback liên kết máy chủ
  2. Một kết nối loopback từ một thủ tục CLR
  3. Một biến bảng mà các cửa hàng dữ liệu, bởi vì họ không bị ảnh hưởng bởi rollbacks
  4. một kết nối loopback từ một thủ tục lưu trữ mở rộng (nhưng họ đang bị phản đối nào có lợi cho thủ tục CLR)

Nếu không có o f các tùy chọn đó là thiết thực cho bạn, lựa chọn khác là chuyển một số điều khiển vào ứng dụng và ra khỏi cơ sở dữ liệu, nhưng tất nhiên chỉ chuyển sự cố sang vị trí khác. Tuy nhiên, nó có thể đáng xem xét.

Các vấn đề liên quan