À quoi servent les crochets [] dans les instructions SQL?

164

J'ai remarqué que Visual Studio 2008 place des crochets autour des noms de colonnes dans SQL. Les supports offrent-ils un avantage? Quand je passe le code T-SQL, je ne me suis jamais soucié d'eux.

Exemple:

Visual Studio:

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

Ma propre voie:

SELECT column1, column2 etc...
Paulj
la source
C'est une bonne chose que votre code SQL codé à la main n'ait jamais eu besoin de crochets, la convention de dénomination de votre base de données devrait exclure les noms qui ont besoin de crochets.
Christian Oudard
La réponse associée traite du paramètre QUOTED_IDENTIFIER: stackoverflow.com/questions/19657101/…
Jared Beck
9
Je pourrais ajouter que les crochets sont une bizarrerie de Microsoft. Le SQL Standard utilise en fait des guillemets doubles ( "), que Microsoft prend également en charge. Si Microsoft ressentait le besoin de tout délimiter, il aurait été préférable d'utiliser les doubles guillemets standard à la place. Mais je suppose que cela aurait rendu trop facile le portage vers un autre SGBD, et cela ne le fera jamais…
Manngo

Réponses:

182

Les crochets sont obligatoires si vous utilisez des mots-clés ou des caractères spéciaux dans les noms ou identificateurs de colonne. Vous pouvez nommer une colonne [First Name](avec un espace), mais vous devrez alors utiliser des crochets chaque fois que vous faites référence à cette colonne.

Les nouveaux outils les ajoutent partout au cas où ou par souci de cohérence.

Michael Haren
la source
3
est-ce le seul but des crochets?
2
Connexes q: stackoverflow.com/questions/9917196/…
Michael Haren
2
sql utilise également des crochets dans l'opérateur similaire d'une requête de sélection pour limiter les résultats à l'aide d'expressions régulières. codeproject.com/Articles/33941/SQL-LIKE-Operator
Jens Frandsen
2
Vous pouvez également définir un nom de colonne appelé selectmais select select from mytablegénérerait une erreur et en select [select] from mytableferait une requête valide. Quel que soit le mot qui devient coloré dans votre studio de gestion SQL, il doit être entouré de crochets si vous souhaitez les utiliser comme noms de colonne / table / sp / etc. Dans MySQL, les guillemets simples inclinés `` `` seraient l'équivalent de ceci.
Barry Guvenkaya
2
Je sais que les requêtes générées automatiquement utilisent des crochets autour de TOUT. Mais c'est parce que Microsoft est trop paresseux pour vérifier si cela est réellement nécessaire. Vous ne devez utiliser des crochets carrés que lorsque cela est absolument nécessaire.
NoName
59

Ils sont pratiques si vos colonnes portent les mêmes noms que les mots-clés SQL ou contiennent des espaces.

Exemple:

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

Oh non! Syntaxe incorrecte à côté du mot-clé "utilisateur". Mais ça:

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

Fonctionne très bien.

Blorgbeard est sorti
la source
@Blordbeard est-ce quelque chose de spécifique à Microsoft SQL Server ou les crochets fonctionnent-ils également de la même manière pour Oracle, mySQL, PostgreSQL, etc.?
user3700562
4
Les crochets ne sont pas du SQL standard, je ne sais pas quels caractères tous les moteurs de base de données utilisent. Par exemple: MySQL utilise des backticks: stackoverflow.com/questions/2889871/…
Blorgbeard est sorti
12

Ils sont utiles si vous utilisez (pour une raison quelconque) des noms de colonnes avec certains caractères par exemple.

Select First Name From People

ne fonctionnerait pas, mais placer des crochets autour du nom de la colonne fonctionnerait

Select [First Name] From People

En bref, c'est une façon de déclarer explicitement un nom d'objet; colonne, table, base de données, utilisateur ou serveur.

GateKiller
la source
6

Les noms de colonne peuvent contenir des caractères et des mots réservés qui perturberont le moteur d'exécution des requêtes, donc placer des crochets autour d'eux à tout moment empêche que cela se produise. Plus facile que de rechercher un problème et de le résoudre, je suppose.


la source
5

Les crochets peuvent être utilisés lorsque les noms de colonne sont des mots réservés.

Si vous générez l'instruction SQL par programme à partir d'une collection de noms de colonnes que vous ne contrôlez pas, vous pouvez éviter les problèmes en utilisant toujours les crochets.

Torlack
la source
5

Indépendamment de suivre une convention de dénomination qui évite d'utiliser des mots réservés, Microsoft ajoute de nouveaux mots réservés. L'utilisation de crochets permet à votre code d'être mis à niveau vers une nouvelle version de SQL Server, sans avoir besoin au préalable de modifier les mots nouvellement réservés de Microsoft à partir de votre code client. Cette modification peut être une préoccupation importante. Cela peut entraîner le retrait prématuré de votre projet ...

Les crochets peuvent également être utiles lorsque vous souhaitez tout remplacer dans un script. Si votre lot contient une variable nommée @String et une colonne nommée [String], vous pouvez renommer la colonne en [NewString], sans renommer @String en @NewString.

Facture
la source
5

Pendant l'âge sombre de SQL dans les années 1990, c'était une bonne pratique car les concepteurs SQL essayaient d'ajouter chaque mot dans le dictionnaire comme mot-clé pour une avalanche sans fin de nouvelles fonctionnalités et ils l'appelaient le brouillon SQL3.

Donc, cela maintient la compatibilité.

Et j'ai trouvé que cela avait un autre effet secondaire intéressant, cela aide beaucoup lorsque vous utilisez grep dans les révisions de code et le refactoring.

Lothar
la source
4

De plus, certaines bases de données Sharepoint contiennent des traits d'union dans leurs noms. L'utilisation de crochets dans les instructions SQL permet aux noms d'être analysés correctement.

HSchlarb
la source
3

Je crois que cela les ajoute là pour la cohérence ... ils ne sont requis que lorsque vous avez un espace ou un caractère spécial dans le nom de la colonne, mais il est plus propre de les inclure tout le temps lorsque l'EDI génère du SQL.

Jeff Donnici
la source