SQL批处理,T-SQL语句和远程过程调用之间有什么区别?
如何确定T-SQL代码的一部分是批处理还是语句?

#1 楼

好吧,我想您主要是在谈论Profiler类,但是无论如何,解释仍然有效。 EG:如果更多的SELECT和INSERT语句结尾有一个GO,则它们将成批处理。

RPC调用是从客户端应用程序到数据库的调用。 EG:一个Windows服务,一个Web应用程序,一个Windows应用程序,无论需要连接到数据库的什么东西,实际上都会进行RPC调用。

现在,在Profiler中,您将看到与数据库服务器相关的所有内容。
来自Management Studio的批处理,来自外部应用程序的RPC调用(批处理或存储过程调用),来自Management Studio的过程执行。

每一个都形成TSQL语句,因此如果您想进一步扩展执行以查看实际执行的内容,则此Profiler类非常有用。插入,选择..etc。

在Profiler中查看它们的最简单方法是仅启用End RPC调用或End batch调用,您将在此处看到所需的所有统计信息(持续时间, IO,CPU)。然后,通过启用TSQL Statements类进一步进行深入研究。

评论


+1只是为了说明,GO是我们使用的流行客户端(即SSMS和sqlcmd)的可接受且默认的批处理终止符,但值得注意的是,实际的GO字符串作为批处理终止符易于更改且可配置。

–托马斯·斯金格
13年2月10日在19:23



“ RPC调用(可以是批处理或存储过程调用)”。那么一切最终都是RPC吗?你能澄清一下吗?

–伊恩·塞缪尔·麦克莱恩·艾尔德(Iain Samuel McLean Elder)
13年2月15日在17:02

不,我想说一个RPC调用是由存储过程调用或一批其他语句组成的。您在Profiler事件中实际看到的是单个过程或一批其他语句。

–玛丽安
13年2月15日在17:30

请在这里查看一些说明。其他一些信息。

–玛丽安
13年2月15日在17:35

#2 楼

批处理vs T-SQL语句
这在SQL Server BOL中已明确定义
批处理是一组从应用程序同时发送到SQL Server以便执行的一个或多个Transact-SQL语句。 Go是大多数客户端应用程序(包括SSMS)中使用的批处理分隔符。
SQL Server将批处理的语句编译为单个可执行单元,称为执行计划。在执行计划中的语句一次一次执行。
根据我的理解,简单来说,RPC是使用客户端API(例如,在ADO.net CommandObject。Execute方法中)执行存储的proc的时间。 />在其中一个Internet新闻组中可以找到更详细的解释:

RPC“ vs” batch“是ADO.NET(或任何SQL Server客户端)使用的TDS执行模式。执行没有参数的普通SQL语句,我们使用“批处理”。执行存储过程时,我们使用RPC(这与独立网络远程过程调用与RPC不同,我们只是碰巧在TDS(SQL Server网络协议)中将此模式称为RPC。此外,如果您通过参数执行批处理,我们实际上会使用一个名为sp_executesql的存储过程,并将SQL语句本身和其余参数传递给它,因此也显示为RPC。

评论


因此,如果批处理中的一条语句失败,整个批处理是否会自动回滚?

–MonsterMMORPG
16年6月28日在11:43

不,除非批处理位于活动事务中或您将IMPLICIT_TRANSACTIONS设置为ON,否则批处理中的每个语句都是自动提交的。批次和交易是两个不同的概念。我知道这个问题很老了,我只想把这个留给以后的读者。

–spaghettidba
19 Mar 12 '19 at 14:13