2009-11-09 15 views
14

En Transact-SQL, un lote es un conjunto de sentencias SQL enviadas juntas y ejecutadas como un grupo, una después de la otra. Los lotes se pueden almacenar en archivos de comando.¿Qué es un lote?

es un archivo .sql * contiene varias sentencias SQL considerados un lote? ¿Qué más consideramos un lote?

+1

¿Esta pregunta solo está relacionada con tsql? Huele un poco a la tarea ... –

+0

mira las etiquetas. tsql. –

+3

no es una tarea – carewithl

Respuesta

8

¿Es un archivo * .sql que contiene varias sentencias SQL consideradas como un lote?

Tipo de. Un archivo * .sql en realidad puede contener varios lotes. Usted delimita los lotes a través del separador de lotes. Es posible que necesite varios lotes en un archivo porque algunas declaraciones (especialmente ciertos comandos "ALTER") solo se pueden ejecutar una vez por lote. Eso puede hacer que sea complicado realizar ALTERs en un bucle.

Otro truco aquí es cómo separar los lotes individuales en un archivo/documento. En el 99% de las herramientas del servidor Sql, el separador de lotes es "GO". Sin embargo, esto es algo que la herramienta puede configurar y, por lo tanto, se encontrará con una persona extraña que usa alguna otra cosa de vez en cuando.

+2

1) No estoy seguro de entender por qué tener lotes es algo bueno (me doy cuenta de que ciertas declaraciones solo se pueden ejecutar una vez por lote, pero si no existieran lotes, entonces no tendríamos ese problema), por lo tanto ¿Por qué el equipo de desarrollo del servidor Sql pensó que sería una buena idea introducir lotes? 2) Además del hecho de que ciertas declaraciones solo se pueden ejecutar una vez por lote, ¿hay alguna otra razón por la que pondríamos un grupo de declaraciones en varios lotes diferentes en lugar de ponerlas todas en un solo lote? – carewithl

+2

Se aplicarán otras declaraciones (opciones SET) hasta el final del lote. –

+1

gracias por ayudarme – carewithl

6

lotes no son parte de TSQL, que están en función del editor de SQL Management Studio. Por lo tanto, por ejemplo, no puede enviar un objeto de comando ADO.NET con "IR" como parte de su texto de comando.

El marcador de lotes - "IR" dice el editor de consultas SQL para enviar el hasta ese momento, antes de proceder durante la ejecución.

Es posible configurar el editor de consulta para utilizar un marcador de lote diferente al lado de "GO", pero esto lo pueden confundir a los diablos de personas.

+1

Son parte de TSQL. También puede enviar un lote con múltiples comandos en ADO.NET. – erikkallen

+1

Creo que estás equivocado. Aquí hay una página de referencia MSDN TSQL en el comando GO: http://msdn.microsoft.com/en-us/library/ms188037.aspx –

+1

Pensándolo bien, veo lo que quieres decir. La definición del lote en la pregunta original es correcta y los lotes afectan a la ejecución de las declaraciones TSQL. –

3

de libros en línea

create default, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE SCHEMA, Crear activador y CREATE VIEW no se pueden combinar con otras declaraciones en un lote. La instrucción CREATE debe iniciar el lote. Todas las demás declaraciones que siguen en ese lote se interpretarán como parte de la definición de la primera declaración CREATE.

Una tabla no se puede cambiar y entonces las nuevas columnas referenciadas en el mismo lote.

De esto puede deducir que se necesitan varios lotes para garantizar que los cambios en la estructura de la base de datos hayan tenido lugar antes de intentar usarlos.