¿De qué sirven los corchetes [] en las instrucciones sql?

163

Me di cuenta de que Visual Studio 2008 está colocando corchetes alrededor de los nombres de columna en sql. ¿Los soportes ofrecen alguna ventaja? Cuando entrego el código T-SQL, nunca me he molestado con ellos.

Ejemplo:

Estudio visual:

SELECT [column1], [column2] etc...

Mi propia manera:

SELECT column1, column2 etc...
Paulj
fuente
Es bueno que su SQL codificado a mano nunca haya necesitado corchetes, la convención de nomenclatura de la base de datos debe excluir los nombres que necesitan corchetes.
Christian Oudard
La respuesta relacionada analiza la configuración de QUOTED_IDENTIFIER: stackoverflow.com/questions/19657101/…
Jared Beck
8
Podría agregar que los corchetes son una peculiaridad de Microsoft. El estándar SQL en realidad usa comillas dobles ( "), que Microsoft también admite. Si Microsoft sintiera la necesidad de delimitar todo, habría sido mejor utilizar las comillas dobles estándar. Pero supongo que habría hecho demasiado fácil a puerto a otro DBMS, y eso nunca lo haré ...
Manngo

Respuestas:

181

Los corchetes son obligatorios si usa palabras clave o caracteres especiales en los nombres o identificadores de columna. Podrías nombrar una columna[First Name] (con un espacio), pero luego necesitaría usar corchetes cada vez que se refiriera a esa columna.

Las herramientas más nuevas las agregan a todas partes, por si acaso o para mayor consistencia.

Michael Haren
fuente
3
¿Es este el único propósito de los corchetes?
1
@mehow, parece de esa manera, pero no tengo una referencia que lo indique explícitamente.
Michael Haren
2
Q relacionado: stackoverflow.com/questions/9917196/…
Michael Haren
2
sql también usa corchetes en el operador like de una consulta select para limitar los resultados usando expresiones regulares. codeproject.com/Articles/33941/SQL-LIKE-Operator
Jens Frandsen
2
También puede definir un nombre de columna llamado selectpero select select from mytablearrojaría un error, por select [select] from mytablelo que sería una consulta válida. Cualquier palabra que se vuelva colorida en su estudio de administración de SQL, debe estar entre corchetes si desea usarlos como nombres de columna / tabla / sp / etc. En MySQL, las comillas simples en ángulo `` `` serían el equivalente de esto.
Barry Guvenkaya
59

Son útiles si sus columnas tienen los mismos nombres que las palabras clave SQL o tienen espacios en ellas.

Ejemplo:

create table test ( id int, user varchar(20) )

¡Oh no! Sintaxis incorrecta cerca de la palabra clave 'usuario'. Pero esto:

create table test ( id int, [user] varchar(20) )

Funciona bien.

Blorgbeard está fuera
fuente
@Blordbeard, ¿es algo específico de Microsoft SQL Server o los corchetes también funcionan de la misma manera para Oracle, mySQL, PostgreSQL, etc.?
user3700562
44
Los corchetes no son SQL estándar, no estoy seguro de qué caracteres usan todos los motores de base de datos. Por ejemplo: MySQL usa backticks: stackoverflow.com/questions/2889871/…
Blorgbeard sale el
12

Son útiles si, por alguna razón, está utilizando nombres de columna con ciertos caracteres, por ejemplo.

Select First Name From People

no funcionaría, pero poner corchetes alrededor del nombre de la columna funcionaría

Select [First Name] From People

En resumen, es una forma de declarar explícitamente un nombre de objeto; columna, tabla, base de datos, usuario o servidor.

GateKiller
fuente
6

Los nombres de columna pueden contener caracteres y palabras reservadas que confundirán al motor de ejecución de consultas, por lo que colocar corchetes alrededor de ellos en todo momento evita que esto suceda. Supongo que es más fácil que buscar un problema y luego tratarlo.


fuente
5

Los corchetes se pueden usar cuando los nombres de columna son palabras reservadas.

Si está generando programáticamente la instrucción SQL a partir de una colección de nombres de columna que no controla, puede evitar problemas utilizando siempre los corchetes.

Torlack
fuente
5

Independientemente de seguir una convención de nomenclatura que evite el uso de palabras reservadas, Microsoft agrega nuevas palabras reservadas. El uso de paréntesis permite que su código se actualice a una nueva versión de SQL Server, sin necesidad de editar las palabras recientemente reservadas de Microsoft de su código de cliente. Esa edición puede ser una preocupación importante. Puede causar que su proyecto sea retirado prematuramente ...

Los corchetes también pueden ser útiles cuando desea reemplazar todo en un script. Si su lote contiene una variable llamada @String y una columna llamada [String], puede cambiar el nombre de la columna a [NewString], sin renombrar @String a @NewString.

Cuenta
fuente
5

Durante la era oscura de SQL en la década de 1990, fue una buena práctica ya que los diseñadores de SQL intentaban agregar cada palabra en el diccionario como palabra clave para una avalancha interminable de nuevas características y lo llamaron el borrador SQL3.

Por lo tanto, mantiene la compatibilidad hacia adelante.

Y descubrí que tiene otro efecto secundario agradable, ayuda mucho cuando usas grep en revisiones de código y refactorización.

Lothar
fuente
4

Además, algunas bases de datos de Sharepoint contienen guiones en sus nombres. El uso de corchetes en sentencias SQL permite que los nombres se analicen correctamente.

HSchlarb
fuente
3

Creo que los agrega allí por coherencia ... solo son necesarios cuando tiene un espacio o un carácter especial en el nombre de la columna, pero es más claro incluirlos todo el tiempo cuando el IDE genera SQL.

Jeff Donnici
fuente