11

मैं गीलेर जानना चाहता हूं या SQL संग्रहित प्रक्रिया के अंदर लेनदेन को दबाना संभव नहीं है। मैं (है कि मैं हासिल करना चाहते हैं) में मेरी सपा निम्नलिखित स्थिति है:संग्रहित प्रक्रिया में लेनदेन को दबाएं

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 

ताकि लेनदेन बी लेन-देन एक :)

+0

अच्छा समय महोदय, मैं बस इसे पोस्ट करने वाला था ... और ऐसा लगता है कि आपका कोड दिया गया एक बहुत ही समान समस्या पर काम कर रहा था :) – amarsuperstar

उत्तर

10

तुम में सूचीबद्ध नहीं प्राप्त करता है क्या मैं सच में करना चाहते हैं एक "स्वायत्त लेनदेन" का वर्णन करना, जो ओरेकल (जो उन्हें समर्थन करता है) से माइग्रेट करने वाले लोगों से एक आम प्रश्न है जो एमएसएसक्यूएल (जो नहीं करता)। This article विभिन्न विकल्पों, जो दुर्भाग्य से विशेष रूप से आकर्षक नहीं हैं बताते हैं:

  1. लूपबैक जुड़ा हुआ सर्वर
  2. एक CLR प्रक्रिया
  3. एक तालिका चर कि डेटा संग्रहीत करता है, क्योंकि वे प्रभावित नहीं हैं से लूपबैक कनेक्शन पुनरावर्तन द्वारा
  4. एक विस्तारित संग्रहीत प्रक्रिया से लूपबैक कनेक्शन (लेकिन वे वैसे भी CLR प्रक्रियाओं के पक्ष में पदावनत कर रहे हैं)

तो कोई भी ओ एफ विकल्प आपके लिए व्यावहारिक हैं, दूसरा विकल्प कुछ नियंत्रण को किसी एप्लिकेशन में और डेटाबेस से बाहर स्थानांतरित करना है, लेकिन निश्चित रूप से यह समस्या को किसी अन्य स्थान पर ले जाती है। फिर भी, यह विचार करने लायक हो सकता है।

संबंधित मुद्दे