查看使用sp_prepare准备的SQL
我正在对一个使用SQL Server数据库的应用程序进行故障排除,我看到很多查看使用sp_prepare准备的SQL,sql,sql-server,Sql,Sql Server,我正在对一个使用SQL Server数据库的应用程序进行故障排除,我看到很多sp\u执行的调用 我似乎找不到sp\u prepare呼叫 如何检查内存中所有准备好的SQL语句?在我上面的评论之后,我找到了一些相关链接: 微软有文档,但它可能是一个挑战性的拼凑东西(一如既往)。如果已知计划句柄,则可以使用: 这是一个表值函数。您可以看到,它利用这些表值函数来检索已编译(准备)计划的有效句柄的对象依赖关系。我正在寻找一种方法来查看SQL Server 2008 R2探查器中sp_执行的实际S
sp\u执行的调用
我似乎找不到sp\u prepare
呼叫
如何检查内存中所有准备好的SQL语句?在我上面的评论之后,我找到了一些相关链接:
微软有文档,但它可能是一个挑战性的拼凑东西(一如既往)。如果已知计划句柄,则可以使用:
这是一个表值函数。您可以看到,它利用这些表值函数来检索已编译(准备)计划的有效句柄的对象依赖关系。我正在寻找一种方法来查看SQL Server 2008 R2探查器中sp_执行的实际SQL语句
为此,我创建了一个新的跟踪,并单击“事件选择”选项卡。我选择了“显示所有事件”,并选中了存储过程>SP:StmtCompleted。运行跟踪之后,我可以看到实际的SQL语句。我也遇到了这个问题。SQL探查器未捕获sp_prepare
语句,因为它发生在SQL探查器跟踪开始运行之前。依赖于sys.dm_exec_sql_text
的各种过帐没有帮助,因为我找不到为该存储过程提供的正确sql_句柄
或plan_句柄
值
我从中找到了一个解决方案:在SQL Profiler中,单击“显示所有事件”复选框,然后在“存储过程”标题下选择“SP:CacheHit”
在生成的SQL分析器输出中,您将看到一个“SP:CacheHit”行,其中包含“RPC:Starting…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}
你真的在使用sql事件探查器吗?在跟踪文件中执行的sp_
调用比准备的sp_
调用多得多。至于查找绑定到准备好的句柄的(参数化)SQL,我将查看SQL Server系统表的模式,查找名为“句柄”或“查询计划”之类的列。