• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MS SQL 错误:无法绑定由多个部分组成的标识符 xxxxx

mysql 搞代码 4年前 (2022-01-09) 33次浏览 已收录 0个评论

今天有个同事问我一个SQL问题,觉得有点意思,虽然能很快定位并解决问题,但是就是有种说不清道不明的感觉。因为不能解释清楚(很多是建立在假设上),顺便记录一下,希望有清楚原理的人能解答一二。 原SQL语句不便于说明问题,我用一个简单的例子来描述这个

今天有个同事问我一个SQL问题,觉得有点意思,虽然能很快定位并解决问题,但是就是有种说不清道不明的感觉。因为不能解释清楚(很多是建立在假设上),顺便记录一下,希望有清楚原理的人能解答一二。

原SQL语句不便于说明问题,我用一个简单的例子来描述这个问题,请看下面SQL:

SELECT TYPE, COUNT(1) FROM sys.objects tGROUP BY sys.objects.type;消息 4104,级别 16,状态 1,第 2 行无法绑定由多个部分组成的标识符 “sys.objects.type”。如果是English版本,则会报如下错误:消息 4104,级别 16,,状态 1,第 3 行The multipart identifier “sys.objects.type” could not be bound.

SQL脚本里面的查询对象sys.objects 使用了别名t,但是如果在GROUP BY 字段名上使用了表名,则会报如上错误。我试着使用了下面几种方式,结果都没有问题。

SELECT TYPE, COU本文来源[email protected]搞@^&代*@码)网5NT(1) FROM sys.objectsGROUP BY TYPE;SELECT TYPE, COUNT(1) FROM sys.objectsGROUP BY sys.objects.type;SELECT TYPE, COUNT(1) FROM sys.objects tGROUP BY t.type;SELECT TYPE, COUNT(1) FROM sys.objects tGROUP BY type;

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

TEST;TEST FROM sys.objects;t.name FROM TEST t , sys.objects s t.t.name t.name FROM TEST t , sys.objects s t.TEST.name 消息 4104,级别 16,状态 1,第 218 19 无法绑定由多个部分组成的标识符 “TEST.name”。

可以肯定的是,如果对表使用了别名,则在后面引用表中字段需要区别时,则必须使用别名,而不能用原表名,否则就会报无法绑定由多个部分组成的标识符错误。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MS SQL 错误:无法绑定由多个部分组成的标识符 xxxxx

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址