java – 是否可以在sql server上使用jdbc获取查询计划?

我正在使用jtds驱动程序,我想确保我的java客户端收到与在Mgmt studio中执行sql时相同的查询计划,有没有办法获得查询计划(理想情况下是xml格式)?

基本上,我想要相同的格式输出

set showplan_xml on 

在管理工作室.有任何想法吗?

一些用于获取session_id计划的代码

SELECT usecounts, cacheobjtype,
  objtype, [text], query_plan
FROM sys.dm_exec_requests req, sys.dm_exec_cached_plans P
  CROSS APPLY
    sys.dm_exec_sql_text(plan_handle)
  CROSS APPLY
    sys.dm_exec_query_plan(plan_handle)    
WHERE cacheobjtype = 'Compiled Plan'
    AND [text] NOT LIKE '%sys.dm_%'
    --and text like '%sp%reassign%'
    and p.plan_handle = req.plan_handle
    and req.session_id = 70 /** <-- your sesssion_id here **/

解决方法:

>确定您的Java会话ID.从java打印@@ SPID或使用SSMS,查看sys.dm_exec_sessions和/或sys.dm_exec_connections获取Java客户端会话(可以通过program_name,host_process_id,client_net_address等标识).
>执行你的陈述.在sys.dm_exec_requests中查找在1处找到的session_id.
>使用sys.dm_exec_query_plan从2处的plan_handle中提取计划.
>将计划另存为.sqlplan文件并在SSMS中打开它

或者,您可以使用Profiler,将分析器附加到服务器并捕获Showplan XML事件.

相关文章

连接数据库的方式:第一种方式:ODBC:开放数据库连接是微软...
JDBCRequest 使用VariableNamesmysql:数据库连接池对象var...
 1.JDBCDBC(JavaDataBaseConnectivity):Java数据库连接技术...
1.需要jar包的支持:java.sqljavax.sqlmysql-conneter-java....
1.简介Activiti是一个业务流程管理(BPM)框架,它是覆盖了业务...
1.JDBC体系系统一组规范:接口JDBC接口(API)包括两个层次:...