2017-10-05 128 views
1

我有一个带有int输出参数的存储过程。如果我运行SQL Server事件探查器,通过一些Net代码执行存储过程,并捕获RPC:完成事件,文本数据是这样的:在sql profiler中执行存储过程

declare @p1 int 
set @p1=13 
exec spStoredProcedure @[email protected] output 
select @p1 

为什么它看起来像它得到的值输出参数在执行存储过程之前?

我发现了一个答案,它是RPC:completed事件类。所以它当时已经知道结果了。但我无法理解为什么exec语句在RPC:completed事件完成之后。

回答

1

您在Profiler(或扩展事件)跟踪中看到的RPC已完成TextData只是RPC请求的呈现,而不是由SQL Server执行的实际语句。这便于将文本复制/粘贴到SSMS窗口中,以便作为SQL批处理临时执行。

由于RPC完成后实际输出值已知,因此跟踪文本使用实际值初始化参数变量。它可能会更清晰,它在执行前被初始化为NULL。