Estoy tratando de depurar un evaluador de fórmulas bastante complicado escrito en T-SQL UDF (no pregunte) que recursivamente (pero indirectamente a través de una función intermedia) se llama a sí mismo, bla , bla.Cómo rastrear llamadas de función T-SQL
Y, por supuesto, tenemos un error.
Ahora, usando instrucciones PRINT (que luego se pueden leer en ADO.NET mediante la implementación de un controlador para el evento InfoMessage), puedo simular un seguimiento para los procedimientos almacenados.
Hacer lo mismo para los resultados de UDF en un mensaje de tiempo de compilación:
Invalid use of side-effecting or time-dependent operator in 'PRINT' within a function.
me sale el mensaje (IMPRIMIR hace algunas cosas como el restablecimiento @@ROWCOUNT
la que definitivamente es un no-no en el UDF, pero ¿cómo puedo dejar rastro ? a través de las llamadas que desea tener esta traza imprime, para que pueda estudiarlo sin distraerse dando un paso a través de las llamadas en el depurador ...
EDIT: me han tratado de utilizar el Analizador de SQL (esto fue una primera vez para mí), pero no puedo averiguar qué rastrear: Alt Aunque puedo obtener el seguimiento para generar las consultas enviadas a la base de datos, son opacas en el sentido de que no puedo acceder a las UDF de Expresión llamadas: puedo rastrear el procedimiento almacenado invocado, pero las UDF llamadas por este el procedimiento no está en la lista. ¿Me estoy perdiendo de algo? Creo que no ...
editar # 2: Acabase la (auto) respuesta aceptada hace rastrear las llamadas de función - muy útil, gracias - no ayuda en saber cuáles eran los parámetros pasó a la función. Esto, por supuesto, es esencial en depurando funciones recursivas. Voy a publicar si encuentro alguna solución ...
Sí, consulte la respuesta de Matthieu a continuación, que explica qué eventos necesita agregar en la configuración de su Analizador. De forma predeterminada, solo captura unos pocos eventos y no son los que necesita para su solución de problemas. –