A che cosa servono le parentesi quadre [] nelle istruzioni sql?


164

Ho notato che Visual Studio 2008 sta posizionando le parentesi quadre attorno ai nomi delle colonne in sql. Le parentesi offrono qualche vantaggio? Quando passo a mano il codice T-SQL non mi sono mai preoccupato di farlo.

Esempio:

Visual Studio:

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

A modo mio:

SELECT column1, column2 etc...

È positivo che l'SQL con codice manuale non abbia mai avuto bisogno di parentesi, la convenzione di denominazione del database dovrebbe escludere i nomi che richiedono parentesi.
Christian Oudard,

La risposta correlata discute l'impostazione di QUOTED_IDENTIFIER: stackoverflow.com/questions/19657101/…
Jared Beck,

9
Potrei aggiungere che le parentesi sono una stranezza di Microsoft. Lo standard SQL attualmente utilizza le virgolette doppie ( "), supportate anche da Microsoft . Se, Microsoft avesse sentito la necessità di delimitare tutto, sarebbe stato preferibile utilizzare le doppie virgolette standard. Ma suppongo che avrebbe reso troppo facile il porting su un altro DBMS e che non lo farà mai ...
Manngo,

Risposte:


182

Le parentesi sono necessarie se si utilizzano parole chiave o caratteri speciali nei nomi di colonna o negli identificatori. Potresti nominare una colonna [First Name](con uno spazio), ma dovrai usare le parentesi ogni volta che ti riferisci a quella colonna.

Gli strumenti più recenti li aggiungono ovunque, per ogni evenienza o per coerenza.


3
è questo l'unico scopo delle parentesi quadre?


2
sql usa anche parentesi quadre nell'operatore simile di una query selezionata per limitare i risultati usando espressioni regolari. codeproject.com/Articles/33941/SQL-LIKE-Operator
Jens Frandsen

2
Puoi anche definire un nome di colonna chiamato selectma select select from mytablegenererebbe un errore e select [select] from mytablelo renderebbe una query valida. Qualunque parola diventi colorata nel tuo studio di gestione SQL, dovrebbe essere racchiusa tra parentesi se vuoi usarle come nomi di colonna / tabella / sp / ecc. In MySQL le virgolette singole `` `` sarebbero l'equivalente di questo.
Barry Guvenkaya,

2
So che le query generate automaticamente usano parentesi quadre attorno a TUTTO. Ma è perché Microsoft è troppo pigra e controlla se è richiesto acutalmente. Dovresti usare le parentesi quadre solo quando è assolutamente necessario.
NoName

59

Sono utili se le colonne hanno gli stessi nomi delle parole chiave SQL o contengono spazi.

Esempio:

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

Oh no! Sintassi errata vicino alla parola chiave "utente". Ma questo:

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

Funziona bene.


@Blordbeard è qualcosa di specifico per Microsoft SQL Server o anche le parentesi quadre funzionano allo stesso modo per Oracle, mySQL, PostgreSQL ecc.?
user3700562

4
Le parentesi non sono SQL standard, non sono sicuro di quali caratteri utilizzino tutti i motori DB. Per esempio: MySQL utilizza backticks: stackoverflow.com/questions/2889871/...
Blorgbeard è fuori

12

Sono utili se stai (per qualche motivo) ad esempio usando nomi di colonna con determinati caratteri.

Select First Name From People

non funzionerebbe, ma mettere parentesi quadre attorno al nome della colonna funzionerebbe

Select [First Name] From People

In breve, è un modo per dichiarare esplicitamente un nome di oggetto; colonna, tabella, database, utente o server.


6

I nomi delle colonne possono contenere caratteri e parole riservate che confondono il motore di esecuzione della query, quindi posizionando le parentesi intorno a loro in ogni momento impedisce che ciò accada. Più facile che cercare un problema e poi risolverlo, immagino.


5

Le parentesi possono essere utilizzate quando i nomi di colonna sono parole riservate.

Se stai generando a livello di codice l'istruzione SQL da una raccolta di nomi di colonna che non controlli, puoi evitare problemi usando sempre le parentesi.


5

Indipendentemente dal seguire una convenzione di denominazione che evita l'uso di parole riservate, Microsoft aggiunge nuove parole riservate. L'uso delle parentesi consente di aggiornare il codice a una nuova versione di SQL Server, senza prima dover modificare le nuove parole riservate di Microsoft dal codice client. Tale modifica può essere una preoccupazione significativa. È possibile che il progetto venga ritirato prematuramente ....

Le parentesi possono anche essere utili quando si desidera sostituire tutto in uno script. Se il batch contiene una variabile denominata @String e una colonna denominata [String], è possibile rinominare la colonna in [NewString], senza rinominare @String in @NewString.


5

Durante le epoche buie di SQL negli anni '90, era una buona pratica poiché i progettisti di SQL stavano provando ad aggiungere ogni parola nel dizionario come parola chiave per valanga infinita di nuove funzionalità e la chiamavano bozza SQL3.

Quindi mantiene avanti la compatibilità.

E ho scoperto che ha un altro piacevole effetto collaterale, aiuta molto quando usi grep nelle revisioni del codice e nel refactoring.


4

Inoltre, alcuni database Sharepoint contengono trattini nei loro nomi. L'uso di parentesi quadre nelle istruzioni SQL consente di analizzare correttamente i nomi.


3

Credo che li aggiunga lì per coerenza ... sono richiesti solo quando hai uno spazio o un carattere speciale nel nome della colonna, ma è più pulito includerli sempre quando l'IDE genera SQL.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.