相关疑难解决方法(0)

来自窗口函数子句的SQL Server的奇怪不一致行为?

在提出另一个问题时,我发现SQL Server(在2005年和2008年都发生过)在处理CASE窗口函数子句中的语句时似乎有奇怪的不一致行为.以下代码给出了错误:

declare @t table (SortColumn int)
insert @t values (1), (2), (3)
declare @asc bit
set @asc = 0

select  row_number() over (order by
            case when 1=1 then SortColumn end asc,
            case when 1=0 then SortColumn end desc) RowNumber
,       *
from    @t
Run Code Online (Sandbox Code Playgroud)

错误是窗口函数不支持常量作为ORDER BY子句表达式. 我认为这是因为case语句可以评估为NULL,这是一个常量.正如可能预期的那样,此代码也会出现相同的错误:

declare @t table (SortColumn int)
insert @t values (1), (2), (3)
declare @asc bit
set @asc = 0

select  row_number() over (order by
            NULL …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

7
推荐指数
1
解决办法
1129
查看次数

标签 统计

sql ×1

sql-server ×1

t-sql ×1