Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

sql server 2008 - constante non entière dans la clause ORDER BY

Voici ce que le MSDN ont à dire sur les constantes de caractères qui sont en quelque sorte la non-integer constant

1) Les constantes non entières sont ... des constantes qui ne sont pas des nombres entiers.

Exemple :'string1' représente une chaîne constante

0x01 représente une constante varbinaire

{ts '2015-02-26 06:00:00'} représente une constante date/heure

1.23 représente une constante numérique

2) Ainsi, les guillemets simples sont utilisés pour définir une constante de chaîne / constante de chaîne de caractères mais SQL Server permet également d'utiliser des guillemets simples comme délimiteur d'identifiant de colonne :

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

Dans ce contexte, il est clair que 'Column1' est un identifiant de colonne mais lorsqu'il est utilisé dans ORDER BY :ORDER BY 'Column1' cela génère de la confusion car SQL Server ne sait pas s'il représente un littéral de chaîne (constante de chaîne de caractères) ou s'il représente un identifiant de colonne / un nom de colonne.

3) SQL Server permet d'utiliser des constantes entières dans ORDER BY donc SELECT ColA, ColB, ColC FROM ... ORDER BY 2 . Dans ce cas 2 est l'index de la colonne ColB . Aussi, si vous voulez trier par ColB et ColC vous pouvez utiliser ORDER BY 2, 3 . L'utilisation de l'index de colonne est considérée comme une mauvaise pratique.

4) Dans ce cas, j'utiliserais

ORDER BY EMP_LAST_NAME + ', ' + EMP_FIRST_NAME