为什么 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 BY
是 ELSE
的一部分。我应该指出 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 条件空值
也是。)
我 运行 进入应用程序中的旧代码。 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 BY
是 ELSE
的一部分。我应该指出 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 条件空值 也是。)