此简单查询在仅一个db-server的上引发“歧义列名TaskID”错误。这是荒唐的。我们在不同的服务器和不同版本的SQL Server(2005/2008)上使用相同的数据库结构对其进行了测试,并且只有该特定客户端的服务器会引发错误。我真的很沮丧。

SELECT Tasks.TaskID
FROM Tasks
INNER JOIN TaskHelpers ON TaskHelpers.TaskID = Tasks.TaskID
ORDER BY TaskID

是的,我知道我可以将Tasks.TaskID放入order by子句中,但是由于某些原因,我不能这样做。

最佳答案

如果您在sql server 2000或兼容级别80或更低的级别上运行查询,则会得到模棱两可的列名错误。在兼容级别为90或更高的sql server 2005/2008上,您的查询运行良好。

从order by子句docs:

“在SQL Server 2005中,合格的列名和别名被解析为FROM子句中列出的列。如果order_by_expression不合格,则该值在SELECT语句中列出的所有列中必须是唯一的。”

关于sql - 一台特定服务器上的"Ambiguous column name"错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2788342/

10-10 06:47