Это, как ни крути, ошибка. Цель SQL Profiler «TextData» - дать кому-то понять и повторить вызов хранимой процедуры. В этом случае выполнение этого T-SQL может дать вам совершенно другой результат, если процедура spStoredProcedure
имеет какую-либо логику, зависящую от входного значения параметра @OutParam
, где это значение равно "13 "были как-то значимыми в качестве входного значения.
Легко увидеть, насколько это удобно (позволяет увидеть выходные значения вызова proc, которые в противном случае должны были бы быть связаны с событием "RPC Output Parameter"), но это фактически "ложь", поскольку какой T-SQL эквивалент был выполнен.
СВЯЗАННЫЙ: я только что натолкнулся на статью команды поддержки клиентов Microsoft - о другом случае, когда преобразование RPC: BinaryData завершенного события в отображаемое значение TextData приводит к неточному воспроизведению исходного вызова RPC - на этот раз проблемы кодовой страницы:
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
ОБНОВЛЕНО: Экспериментируя с этим, я обнаружил еще одну особенность поведения - профилировщик будет использовать этот неправильный начальный SET только в том случае, если входное значение для этого параметра в вызове RPC было Null
. Если было указано ненулевое значение (а параметр в .Net SqlClient имел направление «InputOutput»), то этот начальный SET содержит истинное входное значение, а не результирующее выходное значение. Но если вход был нулевым, то вместо него устанавливается выходное значение.
Это наблюдение подтверждает идею о том, что это просто ошибка обработки нуля при преобразовании отображения RPC в TSQL профилировщика.