簡體   English   中英

如何在Sql Server(2008)中向存儲過程添加跟蹤/調試輸出

[英]How to add tracing/debug output to stored procedures in Sql Server (2008)

能夠將log4net樣式調試信息添加到一組存儲過程的最接近的是什么? 一些程序將工作委托給其他程序,我想從兩者中獲取跟蹤信息。

我在開發時已經打印了print和select語句,理想情況下希望能夠以不同的模式運行proc,具體取決於它是否是正常的故障排除操作並獲得更多或更少的輸出。

在這種特殊情況下,主存儲過程將從代理作業重復運行,但可以在進行故障排除時從管理工作室運行。

procs已經使用錯誤日志表和電子郵件工具來捕獲引發的錯誤。 我希望能夠跟蹤的事情是輸入數據問題意味着輸出數據錯誤但是procs沒有完全失敗,並且確切地看到每個步驟完成了什么是有用的。

您知道什么方法可以產生有意義且理想的可過濾輸出?

每個答案一個,所以我們可以看到最終的排名;-)

開箱即用的答案歡迎,例如“不要 - 在你需要的時候通過管理工作室”

成堆的印刷聲明

例如

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

這個答案只是為了平衡,看到它在這里很安靜。

一種方法可能是檢查是否從SSMS運行proc並激活一些自定義用戶可配置的SQL Server Profiler事件(如果是)。 例如

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

不要添加跟蹤輸出,而是根據需要使用sql server management studio調試器逐步執行。

(添加,看人們是否更喜歡這個)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM