当我将查询中的错误复制到另一个(假设相同的)数据库并且失败时,我发现该错误应该是什么。它看起来像这样
SELECT a.columnOne ,
b.columnOne
FROM TableOne a
INNER JOIN TableTwo b
ON a.id = b.id
WHERE a.Value = 0
ORDER BY a.ColumnOne ,
b.ColumnTwo
'bug'是TableTwo没有名为columnTwo的列(在ORDER BY子句中使用),但运行正常。至少它在一个数据库上,另一个抱怨它应该。但我确信它们都没有TableTwo.columnTwo。
值得一提的是,TableOne DOES有一个名为columnTwo的列。
这是一个很容易解决的问题,但是这对我来说已经存在了很长时间没有任何问题。知道会发生什么吗? (或者我可以提供更多信息?)
答案 0 :(得分:1)
WHEN将ORDER BY列表中的列引用绑定到列 在SELECT列表中定义,列歧义被忽略和列 前缀有时会被忽略。这可能导致结果集 以意想不到的顺序返回。例如,带有的ORDER BY子句 单个两部分列(。),用作 接受SELECT列表中的列的引用,但是表 别名被忽略。请考虑以下查询。 SELECT c1 = -c1 FROM t_table AS x ORDER BY x.c1执行时,将忽略列前缀 在ORDER BY中。排序操作不会在指定的操作上发生 源列(x.c1)按预期;相反,它发生在派生的c1上 查询中定义的列。此查询的执行计划 显示首先计算派生列的值 然后对计算值进行排序
来源 - “MSDN”