我試圖調試一個用T-SQL UDFs編寫的相當複雜的公式評估器(不要問)遞歸(但間接通過中間函數)調用自己,等等,等等。如何跟蹤T-SQL函數調用
而且,當然,我們有一個錯誤。
現在,使用PRINT語句(可以通過實現InfoMessage事件的處理程序從ADO.NET中讀取),我可以模擬存儲過程的跟蹤。
做的UDF結果同樣在編譯時消息:
Invalid use of side-effecting or time-dependent operator in 'PRINT' within a function.
我得到的消息(PRINT做一些東西,如重置@@ROWCOUNT
這definitly是一個禁忌的UDF的,但我怎麼能跟蹤通過調用?我想打印出這個跟蹤,所以我可以研究它,而不會因調試器中的調用而被分散注意力...
編輯:我試圖使用SQL事件探查器對我來說是第一次),但我無法弄清楚要追查什麼:Alt儘管我可以獲取跟蹤以輸出發送到數據庫的查詢,但它們是不透明的,因爲我無法深入到稱爲的Expression-UDF:我可以跟蹤調用的實際存儲過程,但是由此調用的UDF程序沒有列出。我錯過了什麼嗎?我想不是...
編輯#2: Allthough的(自動)接受的答案不跟蹤函數調用 - 非常有幫助,感謝 - 它不會發現什麼參數爲傳遞的幫助功能。這當然是在調試遞歸函數中必不可少的。我會發布,如果我發現任何溶劑......
是的,請查看下面Matthieu的答案,它解釋了您需要添加到Profiler設置中的事件。默認情況下,它只捕獲一些事件,而不是您需要進行故障排除的事件。 – 2009-02-18 18:27:53