为什么 SQL 语句中的 ORDER BY 子句不起作用

Why is this ORDER BY Clause in SQL Statement not working

我 运行 进入应用程序中的旧代码。 ORDER BY 在这里不起作用。从执行计划来看,ORDER BY好像根本就没有执行。

IF(1 = 1)
(
SELECT * FROM dbo.Table WHERE   Column1= 'abc' 
)
ELSE
(
SELECT * FROM dbo.Table 
)



ORDER BY Column2

我知道我可以通过像这样重构这个查询来让它工作。 但是我很好奇为什么 ORDER BY 没有首先在上面的查询中执行。

IF(1 = 1)
BEGIN
SELECT * FROM dbo.Table WHERE Column1= 'abc'  ORDER BY Column2
END
ELSE
BEGIN
SELECT * FROM dbo.Table ORDER BY Column2
END 

ORDER BY 工作,但仅适用于 ELSE 子句。 SQL 服务器允许此语法:

(SELECT * FROM dbo.Table )
ORDER BY Column2

这就是代码的解释方式。 ORDER BYELSE 的一部分。我应该指出 IF 条件为真,因此正在执行的是 THEN 查询。

你可以做 UNION ALL 而不是 IF:

SELECT * FROM dbo.Table WHERE 1 = 1 AND Column1= 'abc' 
UNION ALL
SELECT * FROM dbo.Table WHERE NOT (1 = 1)
ORDER BY Column2

(这里没有,但可能需要处理 IF 条件空值 也是。)