设为首页 加入收藏

TOP

MS SQL错误:无法绑定由多个部分组成的标识符 "xxxxx"解决
2015-07-24 10:55:48 来源: 作者: 【 】 浏览:1
Tags:SQL 错误 无法 绑定 多个 部分 组成 标识 " xxxxx" 解决
MS SQL错误:无法绑定由多个部分组成的标识符 "xxxxx"解决
?
? ? ? ? 今天有个同事问我一个SQL问题,觉得有点意思,虽然能很快定位并解决问题,但是就是有种说不清道不明的感觉。因为不能解释清楚(很多是建立在假设上),顺便记录一下,希望有清楚原理的人能解答一二。
?
原SQL语句不便于说明问题,我用一个简单的例子来描述这个问题,请看下面SQL:?
?
SELECT TYPE, COUNT(1) FROM sys.objects t

GROUP BY sys.objects.type;

?

?
消息 4104,级别 16,状态 1,第 2 行
?
无法绑定由多个部分组成的标识符 "sys.objects.type"。
?
如果是English版本,则会报如下错误:
?
消息 4104,级别 16,状态 1,第 3 行
?
The multi-part identifier "sys.objects.type" could not be bound.
?
?
SQL脚本里面的查询对象sys.objects 使用了别名t,但是如果在GROUP BY 字段名上使用了表名,则会报如上错误。我试着使用了下面几种方式,结果都没有问题。
?

SELECT TYPE, COUNT(1) FROM sys.objects 

GROUP BY TYPE; 


SELECT TYPE, COUNT(1) FROM sys.objects 

GROUP BY sys.objects.type;


SELECT TYPE, COUNT(1) FROM sys.objects  t

GROUP BY t.type;

SELECT TYPE, COUNT(1) FROM sys.objects t

GROUP BY type;

?

?
我自己的解释(假设)是:因为对所要查询的表使用了别名,则SQL语句在解析的时候,例如上面报错的SQL,则会将GROUP BY sys.objects.type 解析成GROUP BY t.sys.objects.type; 这样就会导致编译器无法识别这个对象t.sys.objects.type。因为根本没有这样一列。但是就像我开篇所说那样,有种说不清道不明的感觉,感觉是这么回事,解释也似乎合理,但是总感觉缺乏说服力,于是我又设计了下面一个小例子:
?

 1 DROP TABLE TEST;
 2 
 3 
 4 SELECT * INTO TEST FROM sys.objects;
 5 
 6 
 7 SELECT t.name FROM TEST t , sys.objects s 
 8 
 9 WHERE t.object_id = s.object_id AND t.name ='Test'
10 
11 
12 
13 SELECT t.name FROM TEST t , sys.objects s 
14 
15 WHERE t.object_id = s.object_id AND TEST.name ='Test'
16 
17 消息 4104,级别 16,状态 1,第 2 行
18 

?

19 无法绑定由多个部分组成的标识符 "TEST.name"。
?可以肯定的是,如果对表使用了别名,则在后面引用表中字段需要区别时,则必须使用别名,而不能用原表名,否则就会报无法绑定由多个部分组成的标识符错误。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇PartialLoad在QlikView中的用途 下一篇(软工视频总结一)让我们把知识..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 并发工具类:提 (2025-12-25 20:25:44)
·Java面试技巧:如何 (2025-12-25 20:25:41)
·Java并发编程中的线 (2025-12-25 20:25:38)
·C 语言 - cppreferen (2025-12-25 19:50:27)
·《C 语言入门教程》 (2025-12-25 19:50:23)