sql server 2008 - ORDER BY子句中的非整数常量

时间:2012-09-13 20:11:40

标签: sql-server-2008 sql-order-by constants upgrade

升级顾问说

  

“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"

1 个答案:

答案 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的索引。此外,如果您想按ColBColB排序,则可以使用ColC。列索引的使用被认为是不好的做法。

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

ORDER BY 2, 3