2009-07-29 17 views
6

मेरे पास SQL ​​Server 2000 के लिए संग्रहीत प्रक्रिया है जो किसी भी क्षण में केवल एक ही उदाहरण निष्पादित की जा सकती है। क्या जांचने और सुनिश्चित करने का कोई तरीका है कि प्रक्रिया वर्तमान में निष्पादन में नहीं है?एक संग्रहीत प्रक्रिया को एक ही समय में दो बार निष्पादित करने से रोकें

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

मैंने खोज की है, मैं नहीं ऐसा नहीं लगता कि यह अभी तक पूछा गया है। अगर यह किया गया है, क्षमा करें।

+0

एसक्यूएल-सर्वर का कौन सा संस्करण आप उपयोग कर रहे हैं? –

+0

मैंने पोस्ट अपडेट किया। माफ़ कीजिये। –

उत्तर

10

हाँ एक तरीका है। SQL Server Application locks के रूप में जाना जाता है।

संपादित करें: हाँ यह SQL Server 2000 में भी काम करता है।

+0

मैंने अभी तक यह कोशिश नहीं की है, लेकिन यह मुझे आवश्यक उत्तर की तरह दिखता है। धन्यवाद! –

1

डमी टेबल लॉक करने के बारे में कैसे? इससे असफलताओं के मामले में डेडलॉक्स नहीं होंगे।

+0

मैं नहीं देख सकता कि यह किसी भी तरह से कैसे मदद करेगा। क्या आप और विस्तार कर सकते हैं? –

0

प्रक्रिया की जांच के शुरू में अगर डेटा का टुकड़ा अगर लॉक नहीं यह

प्रक्रिया के अंत में डेटा का टुकड़ा अनलॉक 'बंद कर दिया' है।

यानी

SELECT @IsLocked=IsLocked FROM CheckLockedTable Where spName = 'this_storedProcedure' 

IF @IsLocked = 1 
    RETURN 
ELSE 
    UPDATE CheckLockedTable SET IsLocked = 1 Where spName = 'this_storedProcedure' 

. 
. 
. 

-- At end of Stored Procedure 
    UPDATE CheckLockedTable SET IsLocked = 0 Where spName = 'this_storedProcedure' 
+0

मैं इसे कैसे पूरा करूं? –

+0

अच्छा समाधान लेकिन यह स्वयं निहित नहीं है ... –

5

आप लॉक Stored Procedure for Single Use Only पर पाए गए उदाहरण में sp_getapplocksp_releaseapplock का उपयोग कर सकते हैं।

लेकिन, क्या आप वास्तव में क्या करने की कोशिश कर रहे हैं? क्या आप high isolation level के साथ लेनदेन प्राप्त करने का प्रयास कर रहे हैं? आप आवेदन स्तर पर उस प्रकार की समेकन को संभालने से भी बेहतर होगा, क्योंकि सामान्य उच्च स्तर की भाषाओं में उस तरह की चीज के लिए बेहतर प्राइमेटिव होते हैं।

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