11

SQL depolanmış yordam içindeki bir işlemi engellemek mümkün olup olmadığını bilmek istiyorum. (Ben başarmak istiyorum) benim SP aşağıdaki durum var:Saklı yordamda işlemi bastırın

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 

yani ne gerçekten yapmak istediğini B hareketi A :) Sen

+0

İyi bir zamanlama efendim, bunu yayınlamak üzereydim ... ve kodunuza göre çok benzer bir problem üzerinde çalışıyor gibiydi :) – amarsuperstar

cevap

10

askere almaz ise “otonom bir işlemi” tanımlamak, ki bu da Oracle'dan (onları destekleyen) MSSQL'e (ki bunu yapmaz) geçiren ortak bir sorudur. This article maalesef özellikle çekici değildir çeşitli seçenekleri açıklıyor:

  1. geri dönüş, bağlantılı sunucu
  2. bir CLR prosedür
  3. onlar etkilenmez, çünkü verileri depolayan bir tablo değişkeni geri dönüş, bağlantı geri almalar ile
  4. bir genişletilmiş saklı yordamı geri dönüş, bağlantısı (ama yine de CLR prosedürleri lehine önerilmemektedir edilir)

none o Bu seçenekler sizin için pratiktir, diğer alternatif ise bazı kontrolleri bir uygulamaya ve veritabanına kaydırmaktır, ancak tabi ki bu konuyu başka bir yere kaydırır. Yine de, dikkate değer olabilir.

İlgili konular