¿Cuál es el uso de los corchetes [] en las sentencias sql?


He notado que Visual Studio 2008 está colocando corchetes alrededor de los nombres de las columnas en sql. ¿Los soportes ofrecen alguna ventaja? Cuando código de mano T-SQL nunca me he molestado con ellos.

Ejemplo: Visual Studio: SELECCIONE [column1], [column2] etc...

A mi manera: SELECCIONE column1, column2, etc...

Author: antonjs, 2008-09-10

9 answers

Los corchetes son necesarios si utiliza palabras clave o caracteres especiales en los nombres de columna o identificadores. Podrías nombrar una columna [First Name] (con un espacio) but pero entonces necesitarías usar corchetes cada vez que te refieras a esa columna.

Las herramientas más nuevas las agregan en todas partes por si acaso o por coherencia.

 138
Author: Michael Haren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-08 16:03:13

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.

 46
Author: Blorgbeard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 21:07:23

Son útiles si está (por alguna razón) 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.

 11
Author: GateKiller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 21:08:10

Los nombres de columna pueden contener caracteres y palabras reservadas que confundirán el motor de ejecución de consultas, por lo que colocar corchetes alrededor de ellas en todo momento evita que esto suceda. Más fácil que buscar un problema y luego lidiar con él, supongo.

 6
Author: Will,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 21:04:36

Los corchetes se pueden usar cuando los nombres de las columnas 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.

 5
Author: Torlack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 21:03:43

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

 4
Author: HSchlarb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-22 20:50:34

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 limpio incluirlos todo el tiempo cuando el IDE genera SQL.

 3
Author: Jeff Donnici,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 21:05:11

Independientemente de seguir una convención de nomenclatura que evite el uso de palabras reservadas, Microsoft agrega nuevas palabras reservadas. El uso de corchetes permite actualizar el código a una nueva versión de SQL Server, sin necesidad de editar las palabras recién reservadas de Microsoft del código del cliente. Esa edición puede ser una preocupación significativa. Puede hacer que su proyecto se retire prematuramente....

Los corchetes también pueden ser útiles cuando se 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 cambiar el nombre de @String a @NewString.

 3
Author: Bill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-07 05:34:03

Durante la edad oscura de SQL en los años 1990 fue una buena práctica, ya que los diseñadores de SQL estaban tratando de 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 que mantiene la compatibilidad hacia adelante.

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

 2
Author: Lothar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-05 13:17:08