0

升级顾问说

ORDER BY“在 90 或更高版本的兼容模式下,子句中不允许使用非整数常量”。

但是,当我尝试下面的语句时SQL Server 2008,它工作得很好。所以,我的问题是 - 非整数常量到底是什么?

select 
    POS_NO
    ,EMP_NO
    ,ORG_NAME
    ,EMP_LAST_NAME + ', ' + EMP_FIRST_NAME AS "Name" 
FROM 
    dbo.MyEmpTable 
ORDER BY
    "Name"
4

1 回答 1

0

以下是MSDN关于字符常量必须说的,在某种意义上non-integer constant

字符串常量用单引号括起来,包括字母数字字符(az、AZ 和 0-9)和特殊字符,例如感叹号 (!)、at 符号 (@) 和数字符号 (#)。字符串常量被分配了当前数据库的默认排序规则,除非使用 COLLATE 子句来指定排序规则。用户键入的字符串通过计算机的代码页进行评估,并在需要时转换为数据库默认代码页。

1)非整数常量是......不是整数的常量。

示例: 'string1'表示一个字符串常量

0x01表示一个 varbinary 常数

{ts '2015-02-26 06:00:00'}表示日期时间常数

1.23表示数字常量

2)所以单引号用于定义字符串常量/字符串常量,但SQL Server 也允许使用单引号也用作列标识符分隔符:

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

在这种情况下,很明显这'Column1'是一个列标识符,但在 ORDER BY 中使用时:ORDER BY 'Column1' 它会产生混淆,因为 SQL Server 不知道它是表示字符串文字(字符串常量)还是表示列标识符/列名。

3) SQL Server 允许在 ORDER BY 中使用整数常量SELECT ColA, ColB, ColC FROM ... ORDER BY 2。在这种情况下2是 column 的索引ColB。此外,如果你想排序ColBColC你可以使用ORDER BY 2, 3. 使用列的索引被认为是不好的做法。

4)在这种情况下,我会使用

ORDER BY EMP_LAST_NAME + ', ' + EMP_FIRST_NAME
于 2015-02-26T05:25:30.513 回答