2010-12-07 18 views
11

में संग्रहीत प्रक्रियाओं में ट्रेसिंग/डीबग आउटपुट को कैसे जोड़ा जाए संग्रहीत प्रक्रियाओं के एक सेट में log4net शैली डीबग जानकारी जोड़ने में सक्षम होने के सबसे नज़दीक क्या है? कुछ प्रक्रियाएं अन्य प्रक्रियाओं में काम का प्रतिनिधित्व करती हैं और मैं दोनों से जानकारी का पता लगाना चाहता हूं।एसक्यूएल सर्वर (2008)

मैंने प्रिंट को छिड़क दिया है और उन्हें विकसित करते समय विवरणों का चयन किया है, और आदर्श रूप से समस्या निवारण का सामान्य संचालन है या कम या कम उत्पादन प्राप्त करने के आधार पर अलग-अलग तरीकों से प्रो को चलाने में सक्षम होना चाहते हैं।

इस विशेष मामले में प्राथमिक संग्रहीत प्रो को एजेंट नौकरी से बार-बार चलाया जाएगा, लेकिन समस्या निवारण के दौरान प्रबंधन स्टूडियो से चलाया जा सकता है।

procs पहले से ही त्रुटियों को पकड़ने के लिए एक त्रुटि लॉग तालिका और ईमेल सुविधाओं का उपयोग करते हैं। जिस तरह की चीज मैं ट्रैक करने में सक्षम हूं, वह है जहां एक इनपुट डेटा समस्या का मतलब है कि आउटपुट डेटा गलत है लेकिन procs पूरी तरह विफल नहीं होती है, और यह देखना उपयोगी होगा कि प्रत्येक चरण में क्या किया गया था।

सार्थक और आदर्श फ़िल्टर करने योग्य आउटपुट के उत्पादन के लिए आप किन दृष्टिकोणों को जानते हैं?

प्रति जवाब एक तो हम देख सकते हैं अंतिम रैंकिंग ;-)

बॉक्स जैसे जवाब का स्वागत करते हैं, के समाप्त -

+0

हो सकता है कि यह इतना मदद कर सकते हैं http://stackoverflow.com/questions/3829201/sql-select-print-out-results-of-stored-procedue/3832356 # 3832356 – adopilot

उत्तर

13

पाइल्स

जैसे

print 'Doing something...' 
INSERT INTO foo(a) VALUES(1) 
print @@ROWCOUNT 

बस संतुलन के लिए यह जवाब है, के रूप में यह शांत दौर है यहाँ देख।

+1

में विभाजित करने के लायक है, मैं अपने जवाब में '[dbo]। [PrintMessage] 'दृष्टिकोण को पसंद करता हूं ताकि इसे टॉगल करना आसान हो सके। और छुट्टी। –

+0

मैं सहमत हूं, शीर्ष पर लोकप्रिय उत्तर रखने के लिए बस लोकप्रिय राय के साथ जा रहा हूं। –

+0

@TimAbell क्या इन प्रिंट स्टेटमेंट आउटपुट एसक्यूएल सर्वर में परेशानी शूटिंग के लिए कहीं भी रहते हैं? – Antoops

7

एक "नहीं प्रबंधन स्टूडियो के साथ के माध्यम से कदम आप की जरूरत है जब करने के लिए" यह जांचने के लिए हो सकता है कि एसएसएमएस से प्रो चल रहा है या नहीं, तो Custom user configurable SQL Server Profiler events को आग लगाना है। जैसे

CREATE PROC foo 
AS 
DECLARE @debug bit = CASE WHEN APP_NAME() = 'Microsoft SQL Server Management Studio - Query' 
          THEN 1 
          ELSE 0 END 

DECLARE @userinfo nvarchar(128) 
DECLARE @userdata varbinary(8000) 

--Do some work here 

IF @debug = 1 
BEGIN 
--Do some custom logging 
    SET @userinfo = N'Some custom info' 
    SET @userdata = CAST('Some custom data' AS varbinary(8000)) 
    EXEC sp_trace_generateevent @eventid = 82 /*Use 82-91*/ 
           ,@userinfo = @userinfo 
           ,@userdata = @userdata 

END 

हालांकि व्यवहार में मैं आमतौर पर नीचे की तरह कुछ का उपयोग करें। कभी-कभी आवश्यकताओं के आधार पर एक तालिका में संदेश (और संभवतः चरण और स्थिति मान) लॉग करने के लिए अतिरिक्त कोड के साथ। यह "फिल्टर करने योग्य" आवश्यकता को पूरा करने की अनुमति देगा।

यह संदेश बंद हो जाता है को छोड़कर APP_NAME इंगित करता है यह SSMS (के एक अंग्रेजी भाषा संस्करण) में चलाया जा रहा है और NOWAIT तो संदेश बाहर प्रिंट हो तुरंत बजाय बफर को भरने के लिए के लिए इंतजार का उपयोग करता है, तो बाहर मुद्रित किया जा रहा। प्रिंट बयान के

CREATE PROCEDURE [dbo].[PrintMessage] @message   NVARCHAR(MAX), 
             @PrependCurrentTime BIT = 0 
AS 
    IF APP_NAME() LIKE 'Microsoft SQL Server Management Studio%' 
     BEGIN 
      DECLARE @CurrentTimeString VARCHAR(30); 

      SET @CurrentTimeString = '' 

      IF @PrependCurrentTime = 1 
      BEGIN 
       SET @CurrentTimeString = CONVERT(VARCHAR(19), GETDATE(), 20) + ' ' 
      END 

      RAISERROR('%s%s',0,1,@CurrentTimeString,@message) WITH NOWAIT 

     END 
+0

http://msdn.microsoft.com/en-us/library/ms177548.aspx msdn ref –

+1

एनबी। इसके लिए कुछ विशेषाधिकारों की आवश्यकता है जो आपके उत्पादन वातावरण में उपलब्ध न हों! (जैसा कि मैंने कड़ी मेहनत की है। दोह!) –

+0

साफ, दूसरे भाग को अपने उत्तर में –

1

एससीएल सर्वर प्रबंधन स्टूडियो डीबगर के साथ आवश्यकतानुसार बस चरणबद्ध आउटपुट न जोड़ें।

(यदि लोग इस पसंद को देखने के लिए जोड़ा गया)

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