Sql server 如何获取SQL批处理中的查询数

Sql server 如何获取SQL批处理中的查询数,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我有一个批处理语句,我将通过sp_executesql或Exec执行该语句: Declare @query1 varchar(max), @query2 varchar(max) Set @query1 = ' select top 10 * from sysobjects; select top 10 * from sysColumns;' Set @query2 = ' select top 10 * from sysobjects select top 10 * from sysCo

我有一个批处理语句,我将通过
sp_executesql
Exec
执行该语句:

Declare @query1 varchar(max), @query2  varchar(max)
Set @query1 = '

select top 10 * from sysobjects;
select top 10 * from sysColumns;'

Set @query2 = '
select top 10 * from sysobjects
select top 10 * from sysColumns
select top 10 * from sysColumns
'

Exec(@query1)

Exec(@query2)
有没有办法知道一个批次中有多少select/insert/update/delete语句或查询

对于上述Eg;答案分别是2和3

为清楚起见:我不决定批处理语句,它直接通过存储过程参数到达我这里


我只需要知道服务器在此批处理中执行了多少个查询。

您可以使用
SET SHOWPLAN\u ALL
选项。不幸的是,您不能保存和分析输出(至少不能在TSQL中保存和分析输出-这是使用ADO对象实现的一种方法)


我们能假设每一条语句都以
结尾吗?我不能确定这一点,因此我将两者都作为egs给出。唯一的方法是检查执行计划,例如as。如果不分析查询,就无法猜测语句的数量。一旦有了XML格式的执行计划,就可以使用OPENXML检查计划中出现了多少条语句
SET SHOWPLAN_ALL ON
GO

DECLARE @sql NVARCHAR(MAX)

SET @sql = '
SELECT * FROM dbo.Test 
SELECT TOP 1 * FROM dbo.Test'

EXECUTE sp_executesql @sql
GO

SET SHOWPLAN_ALL OFF
GO