2011-03-07 16 views
7

Así que muchas veces ven with y, tantas veces SQL Server con pedir que tiene ; antes de que¿Cómo funciona la palabra clave "With" en SQL?

¿Cómo ;with ... trabajo ??

;with coords(...) as (
SELECT * ... 
) 

¿Por qué debe tener ; antes que él?

+0

usted debe haber visto esto al crear restricciones en las tablas 'CON \t ( \t PAD_INDEX = OFF \t, STATISTICS_NORECOMPUTE = OFF \t, IGNORE_DUP_KEY = OFF \t, ALLOW_ROW_LOCKS = ON \t, allow_page_locks = ON \t) 'que da como resultado múltiples usos contextuales de la palabra clave' with' junto con la expresión de tabla común. Semi-colon evita cualquier confusión que pueda surgir en la mente de SQL Server al analizar la consulta. – RBT

Respuesta

14

El punto y coma se usa en SQL para finalizar una consulta. Ponerlo antes de una consulta como esa es solo para asegurarse de que la base de datos comprenda que cualquier consulta previa ha finalizado.

Originalmente era necesario después de cada consulta, ya que se ingresaron línea por línea, por lo que la base de datos tenía que saber cuándo ejecutar la consulta. Cuando toda la consulta se envía en una sola cadena, solo necesita punto y coma en el caso en que la sintaxis de SQL no sea suficiente para determinar dónde termina una consulta. Como la palabra clave with tiene diferentes usos, a veces se necesita un punto y coma para asegurarse de que no forma parte de la consulta anterior.

1

El uso de lo que es para expresiones de tabla comunes (CTE). Intentaban forzar que el CTE se definiera como la primera instrucción (es decir, no se puede vincular con otras partes de la consulta);

2

Es una buena práctica finalizar cada instrucción SQL con un punto y coma. Los documentos de SQL Server (por ejemplo, here) sugieren que hacerlo será obligatorio en una versión futura ya que realmente no hay excusa para no acostumbrarse ahora.

Para responder a la pregunta: ve ;WITH... en Stackoverflow porque la persona que responde es un codificador descuidado o la persona que responde asume que la persona que hace la pregunta es un codificador descuidado (y afirman que es el último cuando es el anterior :) La definición de "codificador descuidado" aquí es alguien que solo usa un punto y coma cuando se ven obligados a hacerlo.

+0

Convenciones de sintaxis de Transact-SQL (http://msdn.microsoft.com/en-us/library/ms177563.aspx) "Terminador de instrucciones Transact-SQL. Aunque el punto y coma no es necesario para la mayoría de las declaraciones en esta versión de SQL Server, será requerido en una versión futura ". –

Cuestiones relacionadas