以下语句适用于SQL Server 2005的一个实例,但在另一个实例(也是SQL Server 2005)上失败,并出现以下错误:
已按列表顺序多次指定列。按列表排列的列必须是唯一的。
有谁知道会导致什么?以下是有问题的sql语句的简化版本:
CREATE TABLE #foo (bar INT)
SELECT TOP 150 ID
FROM
( SELECT bar as ID,bar FROM #foo ) tmp
ORDER BY bar,ID
答案 0 :(得分:5)
SELECT @@VERSION;
说什么?例如,可以通过在Service Pack中实现的修复来解释不同的行为。在这方面,您应该尽量保持所有环境的一致性。
答案 1 :(得分:2)
总是明确引用与列关联的表是一个好习惯。但在您的情况下,您仍然会返回一列bar
两次。不知道你为什么要这样做,但你只需要其中一个订购。
CREATE TABLE #foo (bar INT)
SELECT TOP 150 tmp.ID
FROM
( SELECT bar as ID,bar FROM #foo ) tmp
ORDER BY tmp.bar
答案 2 :(得分:2)
数据库是否以相同的兼容级别运行?
select name, cmptlevel from master.dbo.sysdatabases
答案 3 :(得分:2)
错误似乎不言自明。
...Columns in the order by list must be unique.
bar和ID是相同的 - 也就是说,它们不是唯一的。
ORDER BY bar,ID
应改为
ORDER BY ID
因为这是你在外部查询中引用它的方式。
PS - 即使出于某种原因,一个系统允许您通过操作复制订单,而另一个系统不允许;你的最佳实践雷达应该指向你不要在任何一个系统上重复它。考虑到订购两次没有收益,因为第二次重复相同的订单操作时订单不会改变。
答案 4 :(得分:0)
您确定查询看起来一样吗?该查询应该在所有版本的SQL Server中导致相同的错误。
数据库的兼容性级别可能会导致行为上的差异,但在这种情况下这不应该有所不同。
答案 5 :(得分:0)
这也是我遇到的错误。您只需将兼容性更改为至少90或更高。本页介绍了如何: