Ang*_*ker 3 sql sql-server sql-server-2005
以下代码:
SELECT JaguarStartupTime, CPU, AmountOfRam, UpdatedOn, *
FROM dbo.MachineConfiguration
WHERE ServerName = 'WashingtonDC01'
AND UpdatedOn > '11/21/2012'
ORDER BY JaguarStartupTime DESC
Run Code Online (Sandbox Code Playgroud)
导致错误:Ambiguous column name 'JaguarStartupTime'.
但是,删除ORDER BY它使它工作.另外,在ORDER BY子句前面添加表格,如下所示,也可以使用它:
SELECT JaguarStartupTime, CPU, AmountOfRam, UpdatedOn, *
FROM dbo.MachineConfiguration
WHERE ServerName = 'WashingtonDC01'
AND UpdatedOn > '11/21/2012'
ORDER BY dbo.MachineConfiguration.JaguarStartupTime DESC
Run Code Online (Sandbox Code Playgroud)
这从来没有对我有意义.谁能解释一下?
因为查询包含*SELECT子句中的(所有列),其中还包括JaguarStartupTime列.
在Layman的术语中:所以在检索结果时,列显示两次,然后当服务器尝试应用排序顺序时,它不确定您指的是哪一列.
就个人而言,我会更改查询以消除查询中的使用*,即使这意味着列出一长列列名.这是最好的做法,它将避免这个问题.
至于为什么它在前缀时工作,我在MSDN文档中找到了这个:
在SQL Server中,限定的列名和别名将解析为FROM子句中列出的列.如果order_by_expression未限定,则该值必须在SELECT语句中列出的所有列中唯一.
这只是数据库引擎将SQL语句转换为执行计划的基础机制的一部分.
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |