2011-12-27 11 views
5

मुझे अपनी समस्या का समाधान करने का सबसे अच्छा तरीका खोजने में परेशानी हो रही है, कृपया ध्यान रखें कि मैं इस कार्य के बारे में जाने के बेहतर तरीकों के लिए खुला हूं।तालिका अद्यतन ट्रिगर के बाद असीमित रूप से SQL सर्वर से एक कंसोल अनुप्रयोग चलाएं?

मुझे क्या करना है, मेरी तालिका में पंक्ति के मूल्य को अद्यतन करने के बाद, मुझे उस तालिका से 2 फ़ील्ड्स को कंसोल एप्लिकेशन के पैरामीटर के रूप में उपयोग करने की आवश्यकता है। फिलहाल मैं तालिका पर ट्रिगर सेट करके और पैरामीटर के साथ एप्लिकेशन चलाने के लिए xp_cmdshell का उपयोग करके इसे पूरा कर सकता हूं। हालांकि मुझे इसे असंकालिक रूप से करने की ज़रूरत है, इसलिए मेरी संग्रहित प्रक्रिया लटकती नहीं है, जबकि यह कंसोल एप्लिकेशन को समाप्त करने की प्रतीक्षा करता है।

शायद मैं इस गलत तरीके से जा रहा हूं।

मैं एसक्यूएल सर्वर का उपयोग कर रहा 2008

संपादित करें - एंड्री एम द्वारा जवाब सबसे अच्छा प्रतीत हो रहा है वर्तमान में लेकिन टिप्पणी मैं ऐसा "तुरंत" बनाने के लिए कोई तरीका होना चाहिए में कहा गया है। क्या एसपी या ट्रिगर से नौकरी कॉल करना संभव है? या शायद एक समान परिणाम प्राप्त करने का एक और तरीका?

सभी की मदद के लिए धन्यवाद।

संपादित करें - मुझे लगता है कि वह नीचे जवाब देता है क्योंकि इससे मुझे सबसे बेहतर समाधान में मदद मिली। मैं जो कर रहा हूं वह एक ऐसी नौकरी तैयार कर रहा था जो मेरी मेज को दूसरे के खिलाफ पूछताछ करता है जो अद्यतन पंक्तियों का ट्रैक रखता है। तब जब मेरे पास पंक्तियां हों तो मुझे अद्यतन करने की आवश्यकता है मैं निर्दिष्ट पैरामीटर के साथ अपना आवेदन चलाने के लिए xp_cmdshell का उपयोग करता हूं। यह समाधान अब तक सुचारू रूप से काम कर रहा प्रतीत होता है।

+0

आप क्या आवेदन करते हैं? – UnhandledExcepSean

+0

यह मेरी तालिका में अपडेट किए गए मानों के आधार पर कुछ बैच ऑपरेशन करता है, तो मैं उस पर अधिक विस्तार से नहीं जा सकता। – kds6253

+0

क्या इसे डेटाबेस के बाहर कुछ भी करने की ज़रूरत है? – UnhandledExcepSean

उत्तर

5

ट्रिगर से सीधे अपने आवेदन को चलाने का एक और नुकसान है। इसे इस तथ्य से करना है कि आम तौर पर एक से अधिक पंक्ति अपडेट हो सकती हैं। अपने ट्रिगर में इसके लिए जिम्मेदार होने के लिए, आपको शायद अपडेट की गई पंक्तियों पर एक लूप व्यवस्थित करना होगा और प्रत्येक व्यक्तिगत रूप से एप्लिकेशन चलाएं। कर्सर को आम तौर पर अंतिम उपाय के रूप में माना जाता है, और ट्रिगर में भी उतना ही अधिक होता है।

इस तरह की स्थिति में मैं शायद एसक्यूएल एजेंट नौकरी बनाने पर विचार करता हूं जो एक ट्रिगर द्वारा बनाई गई समर्पित तालिका से अद्यतन मूल्यों को पढ़ेगा। नौकरी को अभी भी एक कर्सर का उपयोग करना होगा, मुझे लगता है, लेकिन आपका ट्रिगर नहीं होगा, और मुख्य बिंदु यह है कि, नौकरी से आवेदन चलाने से आपकी मुख्य कार्यप्रणाली बंद नहीं होगी।

+0

यह सबसे अच्छा समाधान की तरह लगता है। ट्रिगर उस नौकरी को कॉल करता है जो तालिका से पूछताछ करता है और पैरामीटर के लिए जानकारी प्राप्त करता है और फिर नौकरी के भीतर xp_cmdshell से अपना app.exe चलाता है। – kds6253

+0

क्या किसी को इस तर्क या संभावित सुधार के साथ कोई समस्या है? – kds6253

+0

@ kds6253: मैं एसक्यूएल नौकरियों से निपटने में बहुत कुशल नहीं हूं, विशेष रूप से मैंने ट्रिगर्स से नौकरियों का आह्वान करने के बारे में कभी नहीं सुना है। मैं केवल एक ट्रिगर के बारे में सोच रहा था जो केवल एक निश्चित तालिका को पॉप्युलेट करेगा, और कुछ भी नहीं। मैंने जो नौकरी का उल्लेख किया वह एक कार्यक्रम पर चलेगा और मेज को मतदान करेगा। नई पंक्तियों का सामना करने के बाद यह प्रत्येक पंक्ति के लिए आवेदन का आह्वान करना शुरू कर देगा, एक के बाद एक। यदि कोई ट्रिगर * सीधे * नौकरी शुरू कर सकता है, तो मैं इसे एक अच्छा बोनस के रूप में देखूंगा। –

0

मुझे लगता है कि आपको xp_cmd_shell का उपयोग करके कंसोल एप्लिकेशन को कॉल करने के बजाय एक विस्तारित संग्रहीत प्रक्रिया (डीएलएल) विकसित करना चाहिए।

+0

विस्तारित संग्रहीत प्रक्रियाओं के लिए कोई विकल्प है? – kds6253

+1

[विस्तारित संग्रहीत प्रक्रिया प्रोग्रामिंग बहिष्कृत है] (http://msdn.microsoft.com/en-us/library/ms143729.aspx) –

+0

मुझे यह नहीं पता था। धन्यवाद। – Baatar

0

मैं एक सीएलआर प्रक्रिया का उपयोग करने का सुझाव दूंगा, क्योंकि यह आपको प्रक्रिया पर अधिक नियंत्रण देता है। लेकिन आप कर सकते हैं xp_cmdshell के साथ ऐसा करें।

ऐसा करने के लिए आप एक बैच फ़ाइल लिख सकते हैं जिसे आप xp_cmdshell के साथ बुलाएंगे। बैच फ़ाइल के अंदर, START कमांड का उपयोग कर उचित पैरामीटर के साथ कंसोल एप्लिकेशन को लात मारें। यह आपकी प्रक्रिया को असीमित रूप से बंद कर देगा। बैच फ़ाइल, और xp_cmdshell आमंत्रण, तुरंत वापस आ जाएगा।

+0

सीएलआर प्रक्रिया लिखने और पंजीकरण करने का एक पूरा उदाहरण मैं यहां से अधिक कर सकता हूं। ऑनलाइन महान उदाहरण हैं। यदि 'स्टार्ट' चाल काम नहीं कर रही है तो आप 'एटी' प्रोग्राम भी आजमा सकते हैं। इसका उपयोग भविष्य में निष्पादित करने के लिए नौकरी निर्धारित करने के लिए किया जा सकता है। यदि आप इसे सेट अप करते हैं, तो भविष्य में एक या दो भविष्य में काम करना चाहिए। हालांकि, मुझे लगता है कि इनमें से कोई भी 'xp_cmdshell' दृष्टिकोण एक हैक होगा। यदि आप कर सकते हैं तो आपको वास्तव में इस मुद्दे के मौलिक डिजाइन को देखना चाहिए। – mwigdahl

1

अपने ट्रिगर में, अपडेट की गई प्रत्येक पंक्ति के लिए सेवा ब्रोकर कतार पर एक संदेश दें। संग्रहित प्रक्रिया लिखें जो कतार के संदेशों को संसाधित करती है। संग्रहीत प्रक्रिया को कतार के लिए सक्रियण संग्रहीत प्रक्रिया के रूप में सेट करें।

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