我有一个带有int输出参数的存储过程。如果我运行SQL Server Profiler,通过一些.Net代码执行存储过程,并捕获RPC:Completed事件,Text Data看起来像这样:
declare @p1 int
set @p1=13
exec spStoredProcedure @OutParam=@p1 output
select @p1
为什么它在执行存储过程之前看起来像是获取输出参数的值?
我发现答案是RPC:completed
事件类。所以它已经知道当时的结果。但在完成RPC:completed
事件后,我无法理解为什么exec语句存在。
答案 0 :(得分:1)
您在Profiler(或扩展事件)跟踪中看到的RPC Completed TextData只是RPC请求的呈现,而不是SQL Server执行的实际语句。这有助于将文本复制/粘贴到SSMS窗口中,以便作为SQL批处理进行临时执行。
由于在RPC完成后已知实际输出值,因此跟踪文本使用实际值初始化参数变量。它可能更清楚,它在执行之前被初始化为NULL。