查看使用sp_prepare准备的SQL

时间:2011-06-27 14:53:31

标签: sql sql-server

我正在对使用SQL Server数据库的应用程序进行故障排除,我看到很多sp_execute次调用。

我似乎无法找到sp_prepare来电。

如何检查内存中所有准备好的SQL语句?

3 个答案:

答案 0 :(得分:13)

我一直在寻找一种方法来查看SQL Server 2008 R2 Profiler中sp_execute执行的实际SQL语句。

为此,我创建了一个新的跟踪,并单击了“事件选择”选项卡。我选择了“显示所有事件”并检查了存储过程> SP:StmtCompleted事件。运行跟踪,我就能看到实际的SQL语句。

答案 1 :(得分:5)

我也遇到了这个问题。 SQL事件探查器未捕获sp_prepare语句,因为它发生在SQL事件探查器跟踪开始运行之前。依赖于sys.dm_exec_sql_text的各种帖子没有帮助,因为我找不到正确的sql_handleplan_handle值来提供该存储过程。

我找到了来自this blog post的解决方案:在SQL事件探查器中,点击“显示所有事件”复选框,然后在“存储过程”标题下选择“的 SP:CacheHit ”。

在生成的SQL事件探查器输出中,您将看到“ SP:CacheHit ”行,其中包含“ RPC:起始... sp_execute 附近的缓存SQL语句“声明。

如果您希望使用:

,则可以在SSMS中重建并重新执行完整的SQL语句
exec sp_executesql @stmt=N'{statement from SP:CacheHit}', 
  @params=N'{parameter declaration from  SP:CacheHit}',
  @param1={value}, {...parameters from RPC:Starting sp_execute statement}

答案 2 :(得分:2)

根据上述评论,我找到了许多相关链接:

How can I find out what command sp_execute is running (without using Profiler)

SP_EXECUTE executing... what?

See the query in sp_execute

微软有文档,但它可能是一个具有挑战性的拼凑事物(一如既往)。如果计划句柄已知,您可以使用:

sys.dm_exec_sql_text (Transact-SQL)

这是一个表值函数。您可以看到利用此类表值函数的a blog article here来检索已编译(准备)计划的有效句柄的对象依赖性。