![](/img/trans.png)
[英]How to automatically export stored procedures for a release 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.