1
11
如果在SQL Server 2000上或在兼容级别80或更低的级别下运行查询,将出现不明确的列名错误。在兼容级别为90或更高的SQL Server 2005/2008上,yur查询运行良好。 从ORDER BY子句文档中: “在SQL Server 2005中,限定的列名和别名解析为FROM子句中列出的列。如果“排序依据”表达式不合格,则该值在select语句中列出的所有列中必须是唯一的。” |
2
8
我妈妈说 总是用表名/别名限定查询中的每一列 就像“总是在插入中包含所有列名”和“不选择*”等突出显示一样。 除了让它更容易,因为它是自记录源代码,如果您曾经添加/更改列,则可以防止此错误。 检查您的兼容性级别,它们与order by的工作方式有区别! 通常,在兼容级别90及更高级别(SQL Server 2008的默认级别)中,没有表名/别名语句的ORDER BY会产生错误。 ALTER DATABASE Compatibility Level (Transact-SQL) 请参见:兼容级别80和级别90之间的差异 兼容级别设置为80
兼容级别设置为90
|
3
5
您可以指定要排序的列的索引:
|
4
4
真的。数据库兼容模式有问题。它被设置为“80”(SQL 2000)。我已将其设置为90,现在查询工作正常。 有关兼容级别的详细信息,请参见: http://msdn.microsoft.com/en-US/library/ms178653(SQL.90).aspx |
5
1
如果您尝试使用标识符呢?通过使用这些标识符,SQL Server知道要按哪个列排序。我从来没有用过别的方法,也从来没有遇到过任何问题。我不明白为什么SQL需要这些标识符,很明显,当有不明确的列名时,他不知道从哪里排序。尝试类似的东西;
编辑: 你为什么不能呢?SQL是否引发错误? |
6
0
你不能的意思是什么?很明显,任务和任务助手都有一个名为taskid的列。您需要指出排序依据中的列与哪个表相关联。 |
Community wiki · SQL语法新手 1 年前 |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |