zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

错误SQL 无法 多个 部分 quot 绑定 组成
2023-09-14 08:58:21 时间

    今天有个同事问我一个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; 


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

 

DROP TABLE TEST;


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

30分钟学习MS SQL Server的事务与并发 本篇介绍了事务和并发,重点解释了事务是个什么鬼,以及在SQL Server中如何管理事务。演示了在SQL Server中如何把一个事务访问的数据和其他事务的不一致性使用进行隔离,以及如何处理死锁的情况。
MS SQL 锁与事务 MS SQL 锁与事务加锁的主要目的是为了防止并发操作时导致的数据不一致等问题,锁分为共享锁(S)、更新锁(U)、排他锁(X),共享锁与更新只是单向兼容?传说中的单相思? 事务能保证数据操作的原子性,要么内部操作都提交,要么都回退。
MS SQL统计信息浅析下篇 原文:MS SQL统计信息浅析下篇    MS SQL统计信息浅析上篇对SQL SERVER 数据库统计信息做了一个整体的介绍,随着我对数据库统计信息的不断认识、理解,于是有了MS SQL统计信息浅析下篇。
MS SQL 统计信息浅析上篇 原文:MS SQL 统计信息浅析上篇 统计信息概念     统计信息是一些对象,这些对象包含在表或索引视图中一列或多列中的数据分布有关的统计信息。数据库查询优化器使用这些统计信息来估计查询结果中的基数或行数。
MS SQL 监控错误日志的告警信息 原文:MS SQL 监控错误日志的告警信息     SQL Server的错误消息(Error Message)按照消息的严重级别一共划分25个等级,级别越高,表示严重性也越高。但是如果你统计sys.messages,你会发现,实际上只有16(SQL SERVER 2008/2012)或17个(SQL SERVER 2005)个级别。
MS SQL巡检系列 检查数据库上一次DBCC CHECKDB的时间 原文:MS SQL巡检系列——检查数据库上一次DBCC CHECKDB的时间 DBCC CHECKDB检查指定数据库中的所有对象的逻辑和物理完整性,具体请参考MSDN文档。我们必须定期对数据库做完整性检查(DBCC CHECKDB),以便能及时发现一些数据库损坏(Corruption)的情况。
MS SQL巡检系列 检查重复索引 原文:MS SQL巡检系列——检查重复索引 前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的。一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方面,网上关于MS SQL巡检方面的资料好像也不是特别多。
潇湘隐者 网名潇湘隐者/潇湘剑客、英文名Kerry,兴趣广泛,广泛涉猎,个性随意,不善言辞。执意做一名会写代码的DBA,混迹于IT行业
第十二届 BigData NoSQL Meetup — 基于hbase的New sql落地实践 立即下载