我有一个在针对两个数据库运行时行为不同的查询。
我已在本地复制了一个临时数据库,并使用它来调试我的代码。
以下是查询:
SELECT DISTINCT ........, ACs.LastName
Bs.Name AS BranchName, .....
......
...... ) LEFT JOIN CompanyTrove
AS Bs
ON .........................
............................
Order BY ACs.LastName,Bs.BranchName, ..... ASC
CompanyTrove表没有名为BranchName的列。因此,我的数据库本地副本失败了。但是当我对实际数据库运行相同的查询时,它运行得很好,即使数据库上的CompanyTrove表没有BranchName列(当然它是同一个表)。
关于我缺少的任何想法?
答案 0 :(得分:2)
见
Behaviour Changes to Database Engine Features in SQL Server 2005
特别是Order By Clause部分。
SQL Server 2000的行为是
ORDER BY子句中的列名称将解析为列出的列 选择列表,无论它们是否合格。例如, 以下查询执行时没有错误:
USE pubs SELECT au_fname AS 'FName', au_lname AS 'LName' FROM authors a ORDER BY a.LName
SQL Server忽略ORDER BY子句中的限定符a并解析 列名LName到选择列表。
所以我认为你在没有投诉的情况下在2000兼容模式下在数据库上尝试这个。
答案 1 :(得分:1)
运行此命令以确保版本匹配:
SELECT @@VERSION
然后运行此选项以查看哪些选项不同:
sp_configure
答案 2 :(得分:1)
鉴于BranchName
只是一个别名,您的order by
子句不应在BranchName
前加bs.
应该是:
Order BY ACs.LastName,BranchName, ..... ASC
答案 3 :(得分:0)
你可以试试bs。*看看是否有效。也许bs.Name确实不存在。
答案 4 :(得分:0)
尝试从ORDER BY
...
BranchName
是实际列的别名 - Bs.Name
Order BY ACs.LastName,BranchName, ..... ASC