为什么SQL Server查询在不同服务器上的工作方式不同?

时间:2016-06-01 21:53:50

标签: sql sql-server

我有一个在针对两个数据库运行时行为不同的查询。

我已在本地复制了一个临时数据库,并使用它来调试我的代码。

以下是查询:

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列(当然它是同一个表)。

关于我缺少的任何想法?

5 个答案:

答案 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