我试图调试一个用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