¿Diferencia entre lote SQL, declaración y RPC?


35

¿Cuál es la diferencia entre el lote SQL, la declaración T-SQL y la llamada a procedimiento remoto?
¿Cómo puedo saber si parte del código T-SQL es un lote o una declaración?

Respuestas:


25

Bueno, supongo que estás hablando principalmente de las clases de Profiler, pero la explicación se mantiene de todos modos.

Un lote SQL es un conjunto de una o más declaraciones agrupadas y separadas por una declaración GO. EG: más instrucciones SELECT e INSERT forman un lote si tienen un GO al final.

Una llamada RPC es una llamada que proviene de una aplicación cliente a la base de datos. Por ejemplo: un servicio de Windows, una aplicación web, una aplicación de Windows, cualquier cosa que necesite una conexión a la base de datos en realidad hace una llamada RPC.

Ahora, en Profiler verá todo lo que toca el servidor de la base de datos. Un lote de Management Studio, una llamada RPC (que es un lote o una llamada a procedimiento almacenado) desde una aplicación externa, una ejecución de procedimiento desde Management Studio.

Cada uno de ellos está formado por sentencias TSQL, por lo que esta clase Profiler es útil en caso de que desee expandir aún más la ejecución, para ver qué se ejecuta realmente. Lo que inserta, selecciona ... etc.

La forma más fácil de verlos en Profiler es habilitar solo Finalizar llamada RPC o Finalizar llamada por lotes y verá allí todas las estadísticas necesarias (duración, IO, CPU). Luego, avance más habilitando la clase de declaraciones TSQL y profundice.


44
+1 Solo para especificar, GOes el terminador de lotes aceptado y predeterminado de los clientes populares que usamos (es decir, SSMS y sqlcmd), pero vale la pena señalar que la GOcadena real como terminador de lotes puede cambiar y es configurable.
Thomas Stringer

1
"Una llamada RPC (que es un lote o una llamada a procedimiento almacenado)" . Entonces, ¿todo es RPC al final? ¿Puedes aclarar eso?
Iain Samuel McLean Élder

No, quería decir que una llamada RPC está formada por una llamada a procedimiento almacenado o por un lote de más declaraciones. Lo que realmente ve en este evento de Profiler es un procedimiento único o un lote de más declaraciones.
Marian

Por favor, vea alguna explicación aquí . Alguna otra información aquí .
Marian

14

Declaración Batch vs T-SQL

Esto está claramente definido en SQL Server BOL aquí

Un lote es un grupo de una o más instrucciones Transact-SQL enviadas al mismo tiempo desde una aplicación a SQL Server para su ejecución. Go es un separador de lotes utilizado en la mayoría de las aplicaciones cliente, incluido SSMS.

SQL Server compila las declaraciones de un lote en una sola unidad ejecutable, llamada plan de ejecución. Las declaraciones en el plan de ejecución se ejecutan una a la vez.

En un término simple basado en mi entendimiento, RPC es cuando ejecutas un proceso almacenado usando la API del cliente (por ejemplo, en ADO.net CommandObject. Método de ejecución)

Una explicación más detallada se encuentra en uno de los grupos de noticias de Internet que publican aquí :

RPC "vs" lote "es el modo de ejecución de TDS que utiliza ADO.NET (o cualquier cliente de SQL Server). Cuando se ejecuta una instrucción SQL simple sin parámetros, usamos un" lote ". Cuando se ejecuta un proceso almacenado, usamos RPC (esto no es lo mismo que RPC como la llamada a procedimiento remoto de red independiente, simplemente llamamos a este modo RPC en TDS (el protocolo de red de SQL Server)). Además, si ejecuta un lote con parámetro, en realidad utilizamos un proceso almacenado llamado sp_executesql, y le pasamos la instrucción SQL y el resto de los parámetros, por lo que también aparece como RPC.

Pablo Castro
Gerente de Programa - Equipo ADO.NET
Microsoft Corp.


entonces, si una declaración en el lote falla, ¿todo el lote se revierte automáticamente?
MonsterMMORPG

No, cada declaración en el lote se confirma de forma autónoma, a menos que el lote esté dentro de una transacción activa o establezca IMPLICIT_TRANSACTIONS en ON. Los lotes y las transacciones son dos conceptos diferentes. Sé que la pregunta es muy antigua, solo voy a dejar esto aquí para futuros lectores.
spaghettidba
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.