2010-04-28 14 views
6

una)lotes vs instrucción SQL

Una sentencia SQL es un solo comando SQL (por ejemplo, SELECT * FROM tabla1 o SET NOCOUNT ON). Un lote, por otro lado, es una cantidad de sentencias SQL enviadas al servidor para su ejecución como una unidad completa. Las declaraciones en el lote se compilan en un solo plan de ejecución. Los lotes están separados por el comando GO

Así que la única diferencia entre instrucción SQL y un lote es que cada sentencia SQL se envía al servidor como una unidad separada y por lo tanto se compila por separado de otras sentencias SQL, mientras que las sentencias SQL en un lote se compilan juntos?

b) Supongo que una de las principales diferencias entre un procedimiento almacenado y un lote es que los procedimientos almacenados se precompilan mientras los lotes no?

thanx

Respuesta

5

a. Solo si cada instrucción SQL se ejecuta individualmente (por ejemplo, en SSMS o en el cliente).

Dos declaraciones = "un lote" siempre, incluso si no se trata de GO. GO simplemente dice herramientas como SSMS para dividir los envíos en el motor.

b. no del todo cierto. Un proceso almacenado se analiza previamente pero no se compila en un plan de ejecución hasta que se invoca y ya no está en la memoria caché del plan. Un lote se analiza y compila de una vez y puede generar un plan reutilizable.

Editar, después de comentario:

  • Los términos "declaración" y "por lotes" son 2 conceptos diferentes
  • Cualquier texto enviado al motor DB es un lote
  • texto es literalmente eso: no el procesamiento se realiza mediante las herramientas de cliente: sólo el texto se envía al motor DB
  • el texto consta de sentencias SQL

Así

  • Un lote se compone de al menos un carácter de texto/un comunicado (pero podría ser de 2, 20 o 20.000 declaraciones)
  • GO le dice a las herramientas de SQL donde para romper un "bloque de texto" /" recopilación de declaraciones "en llamadas de motor DB separadas (= lotes)
+0

" a. Solo si cada instrucción SQL se ejecuta individualmente (por ejemplo, en SSMS o en el cliente). "Suponiendo que haga clic en Microsoft SQL Server Management Studio -> pestaña Nueva consulta (que abre una nueva ventana de consulta), e ingrese en esta ventana de consulta una una única declaración de SQL, entonces esa declaración se considerará como una declaración de SQL regular. Pero si ingreso dos instrucciones, ¿tendremos un lote? – AspOnMyNet

+0

Solo para ser el 100% de lo que está diciendo: declaración de SQL simple enviada al motor de DB a través de Microsoft La ventana de consulta de SQL Server Management Studio también se envía dentro del lote (por lo tanto, este lote contiene solo una declaración)? – AspOnMyNet

+0

Mierda, he intentado darle otro punto, pero en su lugar he votado negativamente. Discúlpeme – AspOnMyNet