在尝试编写查询时,我发现(很难)SQL Server 在执行查询时解析 SELECT 之前很久就解析查询中的 WHERE。
MSDN 文档说,一般的逻辑解析顺序使得 SELECT 几乎在最后被解析(因此在尝试在其他子句中使用列别名时导致“没有这样的对象 [别名]”错误)。甚至有一个建议允许在任何地方使用别名,但被微软团队否决了,理由是 ANSI 标准合规性问题(这表明这种行为是 ANSI 标准的一部分)。
作为一名程序员(不是 DBA),我发现这种行为有点令人困惑,因为在我看来,它在很大程度上违背了拥有列别名的目的(或者,至少,如果列别名是在查询执行的早期解析),因为您可以实际使用别名的唯一位置是在 ORDER BY 中。作为一名程序员,它似乎错过了一个让查询更强大、更方便和更干的机会。
看起来这是一个如此明显的问题,因此有理由认为,除了 SELECT 和 ORDER BY 之外,还有其他原因决定不允许在任何其他内容中使用列别名,但这些原因是什么?