升级顾问说
“90或中的
ORDER BY
子句中不允许使用非整数常量 后来的兼容模式“。
但是,当我在SQL Server 2008
中尝试以下语句时,它的工作正常。所以,我的问题是 - 什么是非整数常数?
select
POS_NO
,EMP_NO
,ORG_NAME
,EMP_LAST_NAME + ', ' + EMP_FIRST_NAME AS "Name"
FROM
dbo.MyEmpTable
ORDER BY
"Name"
答案 0 :(得分:0)
以下是MSDN
关于字符常量的含义{}}}
字符串常量用单引号括起来 包括字母数字字符(a-z,A-Z和0-9)和特殊字符 字符,例如感叹号(!),符号(@)和数字 标志 (#)。字符串常量被指定为默认值 除非使用COLLATE子句,否则当前数据库的排序规则 指定排序规则。评估用户键入的字符串 通过计算机的代码页并被翻译成 数据库默认代码页(如果需要)。
1)非整数常量是......不是整数的常数。
实施例:
non-integer constant
表示字符串常量
'string1'
表示varbinary常量
0x01
表示日期时间常量
{ts '2015-02-26 06:00:00'}
表示数字常量
2)所以单引号用于定义字符串常量/字符串常量但 SQL Server也允许使用单引号也用作列标识符分隔符:
1.23
在此上下文中明确指出SELECT ... expression AS 'Column1'
FROM ...
是列标识符但在ORDER BY中使用时:'Column1'
它会产生混淆,因为SQL Server不知道它是否代表字符串文字(字符串常量)或它表示列标识符/列名。
3)SQL Server允许在ORDER BY中使用整数常量ORDER BY 'Column1'
。在这种情况下,SELECT ColA, ColB, ColC FROM ... ORDER BY 2
是列2
的索引。此外,如果您想按ColB
和ColB
排序,则可以使用ColC
。列索引的使用被认为是不好的做法。
4)在这种情况下,我会使用
ORDER BY 2, 3