sql >> Databasteknik >  >> RDS >> Sqlserver

sql server 2008 - icke-heltalskonstant i ORDER BY-klausul

Här är vad MSDN måste säga om teckenkonstanten som på sätt och vis är non-integer constant

1) Icke-heltalskonstanter är ... konstanter som inte är heltal.

Exempel:'string1' representerar en strängkonstant

0x01 representerar en varbinär konstant

{ts '2015-02-26 06:00:00'} representerar en datetime-konstant

1.23 representerar en numerisk konstant

2) Så enstaka citattecken används för att definiera en strängkonstanter / teckensträngskonstanter men SQL Server tillåter också att använda enstaka citattecken, använd också som kolumnidentifierare:

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

I detta sammanhang är tydligt att 'Column1' är en kolumnidentifierare men när det används i ORDER BY :ORDER BY 'Column1' den skapar förvirring eftersom SQL Server inte vet om den representerar en strängliteral (teckensträngskonstant) eller om den representerar en kolumnidentifierare/kolumnnamn.

3) SQL Server tillåter att använda heltalskonstanter i ORDER BY alltså SELECT ColA, ColB, ColC FROM ... ORDER BY 2 . I det här fallet 2 är indexet för kolumnen ColB . Dessutom, om du vill sortera efter ColB och ColC du kan använda ORDER BY 2, 3 . Användning av kolumns index anses vara dålig praxis.

4) I det här fallet skulle jag använda

ORDER BY EMP_LAST_NAME + ', ' + EMP_FIRST_NAME



  1. Snabb distribution av Visual Studio 2010-appen med SQL-databas

  2. Postgres SSLMode-värde kräver ogiltigt när SSL-stöd inte kompileras med hjälp av utländsk datawrapper

  3. Räknefråga krävs

  4. Problem med $_POST, if isset() och mysql_fetch_assoc():echo returnerar korrekt värde, sidkälla returnerar alltid annat värde