SQL Server: declaraciones vs. lotes vs. transacciones vs. conexiones

10

Mi pregunta es simple: ¿Cuáles son las diferencias / similitudes / cardinalidades entre

  • Actas
  • Lotes
  • Conexiones y
  • Declaraciones

en SQL Server?

Hasta donde entiendo, una conexión es un canal de comunicación único entre una instancia de SQL Server y un cliente dentro del cual se ejecutan colecciones de declaraciones agrupadas como lotes. Un lote se asigna implícita o explícitamente a una o varias transacciones. ¿Es esto correcto?



fuente

Respuestas:

4

Más o menos.

Un lote es solo eso, un lote de comandos que deben ejecutarse. Una transacción es un conjunto de comandos que están garantizados para tener éxito o fallar totalmente (es decir, no completará la mitad de los comandos y luego fallará en el resto, si uno falla, todos fallarán).

Por lo que sé, SQL Server utiliza la agrupación de conexiones, por lo que no confiaría en la idea de una conexión por cliente.

Cromulento
fuente
1
Entonces, ¿cuál es la cardinalidad entre lote y transacción? ¿Es posible tener varios lotes por transacción? ¿Qué tal viceversa?
1
Hasta donde yo sé, es posible tener múltiples transacciones por lote, pero no es posible tener múltiples lotes por transacción.
Cromulent
5

Las transacciones y los lotes son dos conceptos independientes. Ambos se pueden usar en una configuración de uno a muchos.

Los bloques de transacciones son una sola "unidad de trabajo", un concepto que SQL comprometido debe funcionar completamente o no funcionar en absoluto. Por ejemplo, si actualiza dos tablas vinculadas entre sí; ambos deben tener éxito para que se confirme el cambio de datos. [ https://msdn.microsoft.com/en-us/library/ms174377.aspx]

Batch es un concepto de Microsoft. Con las herramientas creadas por Microsoft, como sqlcmd y osql, el lote simplemente garantiza un único plan de ejecución. Por ejemplo, si crea una variable y la usa fuera del lote, la herramienta arrojará un error. [ https://msdn.microsoft.com/en-us/library/ms188037.aspx]

Por lo tanto, puede tener varios lotes que actualizan varias tablas dentro de un bloque de transacciones. En la medida en que no violen los planes de ejecución de lotes individuales que es.

Además, dentro de un lote, puede tener múltiples bloques de transacciones, asegurando la integridad de los datos entre las entidades de la base de datos, como las tablas.

La conexión es simplemente el apretón de manos de comunicación que aprueba la ejecución de consultas en el servidor.

Las declaraciones son líneas individuales que forman una consulta. GO (separador de lotes T-Sql) y BEGIN TRANSACTION (ANSI SQL para iniciar un nuevo bloque de transacciones) son ambas declaraciones.

Aamir Mulla
fuente
1

Los lotes y las transacciones existen al mismo nivel. Un lote es una colección de comandos SQL no relacionados. Una transacción es una colección de comandos SQL que funcionan (en lo que respecta a todos los demás usuarios de esa base de datos) como una sola declaración.

wolfgangsz
fuente