Я пытаюсь отлаживать довольно сложный оценщик формулы, написанный в UDF T-SQL (не спрашивайте), что рекурсивно (но косвенно через промежуточную функцию) вызывает себя, blah, blah.
И, конечно, у нас есть ошибка.
Теперь, используя инструкции PRINT (которые затем могут быть прочитаны из ADO.NET путем реализации обработчика события InfoMessage), я могу имитировать трассировку для хранимых процедур.
Выполнение этого же для UDF приводит к сообщению времени компиляции:
Invalid use of side-effecting or time-dependent operator in 'PRINT' within a function.
Я получаю сообщение (PRINT делает некоторые вещи, такие как сброс @@ROWCOUNT
, который определенно не имеет значения в UDF, но как я могу отслеживать вызовы? Я хочу, чтобы этот трассировка была распечатана, поэтому я могу ее изучить не отвлекаясь, перейдя через вызовы в отладчике...
РЕДАКТИРОВАТЬ: Я попытался использовать SQL Profiler (это был первый раз для меня), но я не могу понять, что отслеживать: хотя я могу получить трассировку выводит запросы, отправленные в базу данных, они непрозрачны в том смысле, что я не могу перейти к вызываемым выражениям UDF: я могу отслеживать вызвавшуюся хранимую процедуру, но UDF, вызываемые этой процедурой, не указаны. Я что-то упускаю? Думаю, не...
РЕДАКТИРОВАТЬ № 2:. Несмотря на то, что принятый (автоматический) ответ проверяет вызовы функций - очень полезно, спасибо - это не помогает определить, какие параметры были переданы функции. Это, конечно, важно в рекурсивных функциях отладки. Я отправлю сообщение, если найду какое-нибудь решение...