【问题标题】:Msg 4104, Level 16, State 1, Line 8 The multi-part identifier "xx.ParseThis" could not be bound消息 4104,级别 16,状态 1,第 8 行无法绑定多部分标识符“xx.ParseThis”
【发布时间】:2018-11-15 17:19:13
【问题描述】:

以下是我正在尝试做的一个非常简短的版本。

我知道SplitString2 有效,因为我使用硬编码字符串并使用 ID = 1 对其进行了测试。

有人能解释一下为什么最后一行不起作用吗?

select 
    xx.ParseThis,
    p1.ID, p1.Value,
    p2.ID, p2.Value  
from 
    (select 
         cast('Term1=2018FA&Term2=2019SP&EndDate=04/02/2019&Major=NURN' as nvarchar(max)) 'ParseThis') xx  
left join 
    dbo.SplitString2('Term1=2018FA&Term2=2019SP&EndDate=04/02/2019&Major=NURN', '&') [p1] on p1.ID = 1  
left join 
    dbo.SplitString2(xx.ParseThis, '&') [p2] on p2.ID = 2

我收到此错误:

消息 4104,第 16 级,状态 1,第 8 行
无法绑定多部分标识符“xx.ParseThis”。

【问题讨论】:

    标签: sql-server ssms


    【解决方案1】:

    您正在尝试加入表达式dbo.SplitString2(xx.ParseThis, '&')

    根据xx.ParseThis 的值,返回的表的内容将逐行变化。

    连接中涉及的表的定义不能基于来自其他表的值进行关联(在这种情况下,您的示例只有一行并不重要。)

    为此,您需要APPLY

    SELECT xx.ParseThis,
           p1.ID,
           p1.Value,
           p2.ID,
           p2.Value
    FROM   (SELECT cast('Term1=2018FA&Term2=2019SP&EndDate=04/02/2019&Major=NURN' AS NVARCHAR(max)) AS ParseThis) xx
           LEFT JOIN dbo.SplitString2('Term1=2018FA&Term2=2019SP&EndDate=04/02/2019&Major=NURN', '&') [p1]
                  ON p1.ID = 1
           OUTER APPLY (SELECT *
                        FROM   dbo.SplitString2(xx.ParseThis, '&') [p2]
                        WHERE  p2.ID = 2) [p2] 
    

    【讨论】:

    • 谢谢你,马丁。
    【解决方案2】:

    我相信这是因为您的查询在您的“发件人”选择/目的地中找不到“xx.ParseThis”

    【讨论】:

      【解决方案3】:

      像这样放置第二个文字字符串

         NURN' as nvarchar(max)) as 'ParseThis' 
      

      尝试在 ParseThis 字段名周围加引号和不加引号

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-22
        • 1970-01-01
        • 2021-11-01
        • 2018-06-07
        • 2016-08-12
        • 1970-01-01
        • 1970-01-01
        • 2017-05-26
        相关资源
        最近更新 更多