【问题标题】:Sql - the multi-part identifier cannot be boundsql - 不能绑定多部分标识符
【发布时间】:2012-03-17 04:07:01
【问题描述】:
select distinct 
   page0.MatterType, 
   page0.Name, 
   page0.MatterNo, 
   page0.security, 
   page0.serial,      
   page6.TribCaseNo, 
   contact0.Name as Cname
from 
   page0, page6, page14
left join 
   contact0 on page0.PrimaryContact = contact0.linkserial
where 
  page0.serial = page6.CaseSerial 
AND page0.serial = page14.CaseSerial 
AND (page14.staffmember = '100001^24' and page14.status != 'Inactive') 
AND page0.status != 'Closed'

我不断收到一个错误

多部分标识符 page0.PrimaryContact 无法绑定。

我检查了语法和拼写,似乎都正确。

谢谢!

【问题讨论】:

  • page0 表上是否存在 PrimaryContact 列?
  • 真的有专栏page0.PrimaryContact吗?我想我会在拼写之前验证这一点。
  • page0 上是否有 PrimaryContact 列?
  • 对不起,我应该补充一下,我仔细检查了这个列确实存在。
  • 关于您的 JOIN 语法的注释。您正在使用隐式和显式语法的组合,这可能会给您带来麻烦。您应该只使用显式 JOIN 语法。请参阅此帖子了解原因:stackoverflow.com/questions/3731952

标签: sql ident


【解决方案1】:

您需要进行显式连接。目前您正在使用旧的连接语法。考虑重构:

select P0.*, P6.TribCaseNo, C0.Name as Cname
FROM        page0 AS P0
INNER JOIN  page6 AS P6 on P0.serial = P6.CaseSerial 
INNER JOIN  page14 AS P14 ON P0.serial = P14.CaseSerial
LEFT JOIN   contact0 AS C0 on P0.PrimaryContact = C0.linkserial

WHERE (P14.staffmember = '100001^24' AND P14.status != 'Inactive') 
AND   P0.status != 'Closed'

【讨论】:

  • 当我这样做时,对于 page0.name、page0.matterno、page0.security、page0.serial、page6.tribcaseno 和contact0.name.
  • @Terri 那么您的表/视图实际上并不包含这些列。编辑您的问题以包含所有这些表的 CREATE 脚本,或者可能是这些表及其所有列名的屏幕截图。
  • SQL Server 告诉你他们没有,正如所写的那样。也许更改为这个更新的 SELECT 列表。编辑了我的答案。
  • 有什么方法可以添加屏幕截图吗?知道为什么 SQL Server 会认为它们不存在吗?
  • Page0 CREATE TABLE [dbo].[PAGE0]( [SERIAL] [int] NOT NULL, [TYPELAW] [int] NULL, [SECURITY] [int] NULL, [Status] [varchar] (10) NULL, [LINKSERIAL] [varchar](21) NULL, [division] [varchar](40) NULL, [MatterType] [varchar](40) NULL, [名称] [varchar](500) NULL, [ DateClosed] [datetime] NULL, [MatterNo] [varchar](16) NULL, [PrimaryContact] [varchar](21) NULL, [DEFLD] [datetime] NULL, [abfld] [varchar](40) NULL, [lafld ] [日期时间] NULL,[OpenBy] [varchar](20) NULL,[TEXT2] [varchar](20) NULL,约束 [PK__PAGE0__6B24EA82] 主键集群
【解决方案2】:

您可以通过更改FROM 中表的顺序来使您的查询正常工作:

select distinct   
page0.MatterType,   
page0.Name,   
page0.MatterNo,   
page0.security,   
page0.serial,        
page6.TribCaseNo,   
contact0.Name as Cname  
from   
 page6, page14, page0 --NOTE: page0 is now  closest to join!!!
left join   
contact0 on page0.PrimaryContact = contact0.linkserial  
where   
page0.serial = page6.CaseSerial   
AND page0.serial = page14.CaseSerial   
AND (page14.staffmember = '100001^24' and page14.status != 'Inactive')   
AND page0.status != 'Closed'  

更新
一般来说,我强烈建议您不要混合新旧语法(就像这里所做的那样),p.campbell 的解决方案是编写查询的正确方法。

【讨论】:

  • 完美。那行得通。我实际上不知道这是新旧语法。很有趣。
猜你喜欢
  • 1970-01-01
  • 2020-06-16
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多