मैं एक नहीं बल्कि जटिल सूत्र मूल्यांकनकर्ता T-SQL UDFs में लिखा (मत पूछो) डिबग करने के लिए कोशिश कर रहा हूँ कॉल रिकर्सिवली (लेकिन एक मध्यवर्ती समारोह के माध्यम से परोक्ष रूप से) ही कहता है, blah , ब्लाह।T-SQL समारोह का पता लगाने के लिए कैसे
और, ज़ाहिर है, हमारे पास एक बग है।
अब, PRINT कथन का उपयोग करके (जिसे InfoMessage ईवेंट के लिए हैंडलर लागू करके ADO.NET से पढ़ा जा सकता है), मैं संग्रहित प्रक्रियाओं के लिए एक ट्रेस अनुकरण कर सकता हूं।
एक संकलन समय संदेश में यूडीएफ परिणाम के लिए एक ही कर रहा:
Invalid use of side-effecting or time-dependent operator in 'PRINT' within a function.
मैं (संदेश मिलता है प्रिंट @@ROWCOUNT
को रीसेट जो निश्चित रूप से है जैसे कुछ सामान करता नहीं-नहीं UDFs में है, लेकिन मैं कैसे पता लगा सकते हैं ? कॉल के माध्यम से मैं इस का पता लगाने के लिए बाहर मुद्रित करना चाहते हैं, तो मैं डीबगर में कॉल के माध्यम से कदम से विचलित हुए बिना यह अध्ययन कर सकते हैं ...
संपादित करें: मैं एसक्यूएल प्रोफाइलर उपयोग करने के लिए कोशिश की है (इस मेरे लिए पहली बार एक था), लेकिन मैं यह नहीं समझ सकता कि किसके लिए पता लगाना है: Alt आटा मैं डाटाबेस को भेजे गए प्रश्नों को आउटपुट करने के लिए ट्रेस प्राप्त कर सकता हूं, वे इस अर्थ में अपारदर्शी हैं कि मैं अभिव्यक्ति-यूडीएफ को ड्रिल नहीं कर सकता हूं: मैं वास्तविक संग्रहित प्रक्रिया का पता लगा सकता हूं, लेकिन इसके द्वारा बुलाए गए यूडीएफ प्रक्रिया सूचीबद्ध नहीं है। क्या मैं कुछ भूल रहा हूँ? मुझे नहीं लगता है कि ...
संपादित करें # 2: Allthough (ऑटो) स्वीकार किए जाते हैं जवाब का पता लगाने फ़ंक्शन को कॉल करता है - बहुत ही उपयोगी है, धन्यवाद - यह क्या मापदंडों के लिए पारित थे जानने में मदद नहीं करता है समारोह। यह, ज़ाहिर है, में रिकर्सिव फ़ंक्शन डिबगिंग में आवश्यक है। अगर मुझे कोई सोशलेशन मिल जाए तो मैं पोस्ट करूंगा ...
हां, नीचे मैथ्यूयू से जवाब देखें, जो बताता है कि आपको अपने प्रोफाइलर सेटअप में कौन सी घटनाओं को जोड़ने की आवश्यकता है। डिफ़ॉल्ट रूप से यह केवल कुछ घटनाओं को कैप्चर करता है, और वे आपके समस्या निवारण के लिए आवश्यक नहीं हैं। –