我正在对使用SQL Server数据库的应用程序进行故障排除,我看到很多sp_execute
次调用。
我似乎无法找到sp_prepare
来电。
如何检查内存中所有准备好的SQL语句?
答案 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_handle
或plan_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)
微软有文档,但它可能是一个具有挑战性的拼凑事物(一如既往)。如果计划句柄已知,您可以使用:
sys.dm_exec_sql_text (Transact-SQL)
这是一个表值函数。您可以看到利用此类表值函数的a blog article here来检索已编译(准备)计划的有效句柄的对象依赖性。