2015-09-15 16 views
13

Le seguenti tre query di selezione, indipendentemente dalla clausola Where che contiene uno spazio aggiuntivo tra l'alias di tabella e il nome della colonna, producono lo stesso risultato. Hanno tutti gli stessi piani di esecuzione. Perché la presenza di uno spazio non genera un errore di sintassi?Perché lo spazio in questa clausola Where non causa un errore di sintassi?

DECLARE @TblX TABLE(
    ColX int 
    ,ColY float 
    ) 

-----As it normally should be 
SELECT * 
FROM @TblX X 
WHERE X.ColX = 1 

----Even this works 
SELECT * 
FROM @TblX X 
WHERE X .ColX = 1 

----And this too 
SELECT * 
FROM @TblX X 
WHERE X. ColX = 1 
+0

direi, sono la stessa query, o intendi perché la query è stata eseguita senza alcuna tupla? –

+0

Perché non dovrebbe essere legale? Funziona anche in Python. – Kevin

risposta

13

Perché SQL, anche se non interamente sensibile allo spazio, è, diciamo, "tollerante allo spazio". Per esempio, prova questo:

SELECT 23AB 

Divertimento, eh? Questa caratteristica venne da lontano nelle specifiche SQL originali nei primi anni '80, quando questo tipo di cose era ancora considerato da alcuni come buono (perché Fortran e COBOL avevano comportamenti simili). IIRC, è deprecato ora, ma per ragioni di legacy/compatibilità, siamo ancora bloccati.

Problemi correlati