SQL批处理,语句和RPC之间的区别?


35

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

Answers:


25

好吧,我想您主要是在谈论Profiler类,但是无论如何,解释还是成立的。

SQL批处理是一组一个或多个语句的集合,这些语句组合在一起并由GO语句分隔。EG:如果更多的SELECT和INSERT语句末尾有GO,则它们将组成一个批处理。

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

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

它们每个都是由TSQL语句组成的,因此,如果您想进一步扩展执行以查看实际执行的内容,则此Profiler类很有用。插入,选择..等等

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


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

1
“一个RPC调用(可以是批处理或存储过程调用)”。那么一切最终都是RPC吗?你能澄清一下吗?
Iain Samuel McLean年长者,

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

在这里查看一些说明。其他的一些信息在这里
玛丽安

14

批处理与T-SQL语句

这是在SQL Server BOL明确规定这里

批处理是一从一个应用程序同时发送到SQL Server以便执行的一个或多个Transact-SQL语句。 Go是大多数客户端应用程序(包括SSMS)中使用的批处理分隔符。

SQL Server将批处理的语句编译为单个可执行单元,称为执行计划。然后,一次执行计划中的语句。

简单来说,RPC是指您使用客户端API执行存储的proc(例如,在ADO.net CommandObject中。Execute方法)

更详细的解释在互联网新闻组的一个发现这里

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

Pablo Castro
程序经理-ADO.NET团队
Microsoft Corp.


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

不,除非批处理位于活动事务中或您将IMPLICIT_TRANSACTIONS设置为ON,否则批处理中的每个语句都是自动提交的。批次和交易是两个不同的概念。我知道这个问题已经很老了,我只想把这个留给以后的读者。
spaghettidba
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.