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

Fro*_*Eye 40 sql-server

SQL 批处理、T-SQL 语句和远程过程调用有什么区别?
如何判断部分 T-SQL 代码是批处理还是语句?

Mar*_*ian 31

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

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

RPC 调用是从客户端应用程序到数据库的调用。EG:windows 服务、web 应用程序、windows 应用程序,任何需要连接到数据库的东西实际上都会进行 RPC 调用。

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

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

在 Profiler 中查看它们的最简单方法是仅启用 End RPC call 或 End batch call,您将在那里看到所需的所有统计信息(持续时间、IO、CPU)。然后,通过启用 TSQL Statements 类并深入挖掘。

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

SQL*_*ner 17

批处理与 T-SQL 语句

这在 SQL Server BOL here 中有明确定义

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

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

简单来说,根据我的理解,RPC 是当您使用客户端 API 执行存储过程时(例如在 ADO.net CommandObject.Execute 方法中)

更详细的解释可在此处发布的互联网新闻组之一中找到:

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

Pablo Castro
项目经理 - ADO.NET Team
Microsoft Corp.