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



我在一个应用程序中遇到了一段旧代码。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 Server允许以下语法:

(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条件空值可能需要处理。)

相关内容

  • 没有找到相关文章

最新更新