仅使用一个命令(不使用多个GO语句),强制VB.net应用程序中的sql缓存特定sql语句的查询计划

仅使用一个命令(不使用多个GO语句),强制VB.net应用程序中的sql缓存特定sql语句的查询计划,sql,vb.net,query-planner,Sql,Vb.net,Query Planner,我面临以下问题。 我需要在我的vb.net程序SQL的xml查询计划中以编程的方式进行查询。然后我将解析它并获取一些信息,但事实并非如此 通过ManagementStudio,当我使用以下命令集时,我得到了我想要的结果 set showplan_xml on GO select * from testtable GO set showplan_xml off GO 问题是,我可以从程序中发送sql命令来执行,或者发送sql命令来获取数据,但一次只能发送一个,这是因为我发送的命令带有一个特定

我面临以下问题。 我需要在我的vb.net程序SQL的xml查询计划中以编程的方式进行查询。然后我将解析它并获取一些信息,但事实并非如此

通过ManagementStudio,当我使用以下命令集时,我得到了我想要的结果

set showplan_xml on 
GO 
select * from testtable
GO
set showplan_xml off
GO
问题是,我可以从程序中发送sql命令来执行,或者发送sql命令来获取数据,但一次只能发送一个,这是因为我发送的命令带有一个特定的自定义类,该类与连接数据库的应用程序服务器相连接。我没有直接访问数据库的权限来使用我在谷歌搜索时找到的所有方法,或者至少我不太了解这个定制类的所有方法

我正在尝试使用查询计划缓存找到一个解决方法。我在想,是否可以在查询结束时使用一个选项来强制sql缓存查询计划,然后使用以下方法获取xml

SELECT cplan.usecounts, cplan.objtype, qtext.text, qplan.query_plan
FROM sys.dm_exec_cached_plans AS cplan
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS qtext
CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS qplan
ORDER BY cplan.usecounts DESC

您需要能够控制执行命令的连接(
SqlConnection
)。然后,只需先在该连接上执行
将showplan\u xml设置为on
,然后执行
选择..
,然后执行
将showplan\u xml设置为off
。因此,它可以是3个命令,但在同一个连接上。不幸的是,这不起作用(我已经尝试过了),因为在每个命令之后,类发送一个exec sp_reset_connection,您可以调用一个存储过程吗?不幸的是,只有本机sql过程才支持设置为showplan_的xml!我也试过这个!虽然想法很好!!