Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

sql server 2008 - costante non intera nella clausola ORDER BY

Ecco cosa è il MSDN devo dire sulle costanti di carattere che sono in un certo senso la non-integer constant

1) Le costanti non intere sono ... costanti che non sono numeri interi.

Esempio:'string1' rappresenta una costante stringa

0x01 rappresenta una costante varbina

{ts '2015-02-26 06:00:00'} rappresenta una costante di data e ora

1.23 rappresenta una costante numerica

2) Quindi le virgolette singole vengono utilizzate per definire costanti di stringa / costanti di stringa di caratteri ma SQL Server consente inoltre di utilizzare le virgolette singole anche come delimitatore dell'identificatore di colonna:

SELECT ... expression AS 'Column1'
FROM ...

In questo contesto è chiaro che 'Column1' è un identificatore di colonna ma se utilizzato in ORDER BY :ORDER BY 'Column1' genera confusione perché SQL Server non sa se rappresenta una stringa letterale (costante di stringa di caratteri) o rappresenta un identificatore di colonna/nome di colonna.

3) SQL Server consente di utilizzare costanti intere in ORDER BY quindi SELECT ColA, ColB, ColC FROM ... ORDER BY 2 . In questo caso 2 è l'indice della colonna ColB . Inoltre, se vuoi ordinare per ColB e ColC potresti usare ORDER BY 2, 3 . L'utilizzo dell'indice della colonna è considerato una cattiva pratica.

4) In questo caso userei

ORDER BY EMP_LAST_NAME + ', ' + EMP_FIRST_NAME