【问题标题】:RTRIM causing "the multipart identifier could not be bound"RTRIM 导致“无法绑定多部分标识符”
【发布时间】:2021-12-23 15:42:37
【问题描述】:

我觉得以下应该可行。尝试正确修剪并在同一行添加login_namecustr_id,并在它们之间添加':'

但我得到了

多部分标识符不能绑定在所有内容上,例如 l.login_name、c.custr_id 等。

SELECT
rtrim(l.login_name)+':'+
rtrim(c.custr_id)
FROM
customer c
LEFT JOIN login l
ON l.custr_id = c.custr_id
WHERE
c.custr_id=777

【问题讨论】:

  • 提问时,您需要提供minimal reproducible example: (1) DDL 和样本数据填充,即 CREATE 表和 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上述#1 中的样本数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。
  • 是什么让您认为是rtrim 导致了问题?
  • “无法绑定多部分标识符。” 是当您尝试将 2+ 部分命名与 @987654327 中不存在的限定符一起使用时@。例如SELECT db.name FROM sys.databases d; 将返回错误,因为databases 的别名为d,而不是db。你上面的SQL没有这样的问题。看来你在这里没有告诉我们一些事情。
  • @Larnu,可悲的是,我没有遗漏任何内容。没有 rtrim 的 select 语句可以正常工作。我在上面添加它的那一刻,就是出现多部分标识符问题的时候。
  • 没有 rtrim 的 select 语句没有提到 login.login_name 列。检查 col 名称是否有效。

标签: sql sql-server


【解决方案1】:

尝试重新启动 SSMS。有时,仅此一项就可以解决问题。对我来说,重新启动 SSMS 解决了它。

【讨论】:

  • 如前所述,RTRIM 不会导致此错误。您忽略或不了解导致问题的某些细节。可能是您的查询窗口未使用正确的数据库,您在多个数据库中有同一个表但具有不同的列,您有多个架构包含这些具有不同列的表,等等。
【解决方案2】:

如果某些内容为 NULL,它可能会失败。我会应用一个 coalesce() 例如

rtrim(coalesce(l.login_name, ''))+':'+
rtrim(coalesce(c.custr_id, ''))

【讨论】:

  • COALESCE 将避免或修复 OP 的错误。
猜你喜欢
  • 2011-11-10
  • 2010-11-02
  • 2023-03-21
相关资源
最近更新 更多