Esto es, no importa cómo lo mires, un error. La intención del Analizador de SQL "TextData" es permitir que alguien comprenda y repita la llamada al procedimiento almacenado. En este caso, ejecutar este T-SQL puede darle un resultado completamente diferente, si el procedimiento spStoredProcedure
tiene alguna lógica dependiente del valor de entrada del parámetro @OutParam
, donde ese valor de "13" era de algún modo significativo como valor de entrada .
Es fácil ver cómo puede ser conveniente (le permite ver los valores de salida de la llamada de proceso, que de otro modo tendría que ver con el evento "Parámetro de salida RPC"), pero es efectivamente una "mentira" en cuanto a qué equivalente T-SQL se ejecutó.
RELACIONADO: Acabo de encontrar un artículo del equipo de soporte y atención al cliente de Microsoft - sobre otro caso en el que la conversión de RPC: los datos binarios del evento completados en un valor visualizable TextData da como resultado una reproducción imprecisa de la llamada RPC original problemas de página de códigos de tiempo:
http://blogs.msdn.com/b/psssql/archive/2008/01/24/how-it-works-conversion-of-a-varchar-rpc-parameter-to-text-from-a-trace-trc-capture.aspx
ACTUALIZACIÓN: al experimentar con esto, he encontrado otra peculiaridad de la conducta - el generador de perfiles sólo utilizar este conjunto inicial incorrecto si el valor de entrada para ese parámetro, en la llamada RPC, era Null
. Si se proporcionó un valor no nulo (y el parámetro, en .Net SqlClient, tenía la dirección "InputOutput"), entonces ese SET inicial contiene el verdadero valor de entrada, y no el valor de salida resultante. Pero si la entrada fue nula, entonces el valor de salida se establece en su lugar. Esta observación respalda la noción de que esto es simplemente un error de manejo nulo en la conversión de visualización de perfil RPC a TSQL.
? porque esa es la forma en que se muestra? ¿Dónde está la pregunta? –
Bueno, la forma en que se muestra hace que parezca que está adivinando mágicamente el valor del parámetro de salida antes de ejecutar el procedimiento almacenado. Obviamente, esta no es la secuencia de comandos que se están ejecutando, así que me preguntaba por qué se muestra de esa manera. –