2009-04-23 8 views
10

Guardate voi stessi:Perché uno spazio è un nome di colonna valido in SqlServer?

create table #temp ([ ] varchar(1)) 
insert into #temp values ('1') 
select [ ] from #temp 

Che cosa nel mondo è il razionale per permettere questo?

+0

Ciò è interessante; +1 per sottolineare questa stranezza ... –

+2

questo è solo un modo per fregare un po 'povero linfa che manterrà un'applicazione da 5 anni a questa parte! Posso solo vederli tirare fuori i capelli cercando di capire alcune query dinamiche e da dove provengono i dati. haa, è come il GOTO TOP, ma metti il ​​"top" in basso, o dichiari una variabile chiamata Five e impostala su 5 ma cambia il valore in qualche altro posto, questo è un classico in divenire! –

risposta

10

Credo che la logica è più lungo le linee di:

Vale la pena di prevenire questa funzionalità ?

Non so come SQL sia codificato internamente ma sospetterei che sarebbe necessario più impegno per impedire che ciò avvenga.

+0

ora questo è bello :) Mi piace la tua giustificazione +1 –

+0

Abbastanza giusto. Probabilmente hai ragione a riguardo, impiegando più sforzi per impedirlo. –

9

Lo uso sempre come segnaposto/separatore durante il debug di query complesse. Potrei avere qualcosa di simile:

SELECT a.*, ' ' as [ ], b.* 
FROM a 
LEFT JOIN b on ... 

In questo modo ottengo una sezione vuota tra le due tabelle in modo da poter facilmente vedere nei risultati in cui ci si ferma e l'altro inizia.

In seguito, quando avrò i risultati e le prestazioni di cui ho bisogno, cambierò la clausola select per utilizzare solo le colonne a cui tengo.

Detto questo, suppongo che non ci sia motivo per cui non potrei usare qualcos'altro per il nome della colonna.

+1

+1 piccolo trucco per un mio fastidio grazie – JoshBerke

2

Immagino che uno spazio sia proprio come qualsiasi altro personaggio. È anche possibile creare una tabella denominata []. (L'ho provato, e ha funzionato.) Penso che semplicemente non ci siano restrizioni su questo.

+0

Anche una tabella? Yikes. Non ho pensato di provarlo. –

4

È possibile utilizzare qualsiasi carattere valido tra [] per definire i nomi delle tabelle della colonna &. Dato che qualcosa come [Una colonna] è valida (con spazio), non c'è motivo di impedire un singolo spazio come nome di colonna.

Tuttavia, gli spazi finali vengono rimossi così.

[ ] and [ ] (1 & 2 spaces)
saranno sia trattato come

 
[ ] (1 space). 
+0

La parte "Tuttavia ..." è una citazione, o semplicemente formattata come una? Se si tratta di una citazione, si prega di aggiungere un collegamento. – Tomalak

+0

Ho una risposta aggiornata, il Tuttavia non è una citazione, ho appena incasinato il tag pre. – Steven

4

Lo spazio è un carattere accettabili, come alcune persone piace avere spazi nei loro nomi delle colonne. E se può essere una parte del nome di una colonna, allora perché non un nome di colonna da solo?

Perché mai lo fanno rimane un mistero per me, poiché rende la programmazione molto più difficile (racchiudendo costantemente tutto in "" o []). In realtà ho visto un nome di colonna con un punto interrogativo, che è sicuramente qualcosa che eviterei di usare in qualsiasi identificatore, ma è possibile, ancora.

+0

Ack! In un certo senso, è ancora peggio. –

2

Apprezzo l'ipotesi che io sia abbastanza responsabile da non ferire me stesso con funzionalità potenzialmente pericolose. Non ho trovato una buona ragione per gli spazi nei nomi degli oggetti, ma in alcuni casi sembra essere popolare. Questo è un esempio estremo di correre con le forbici.

Problemi correlati