消息4104,级别16,状态1,行8不能绑定多部分标识符“ xx.ParseThis”

时间:2018-11-14 23:06:20

标签: sql-server ssms

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

我知道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”无法绑定。

3 个答案:

答案 0 :(得分:0)

您正在尝试加入表达式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] 

答案 1 :(得分:-1)

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

答案 2 :(得分:-1)

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

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

尝试在ParseThis FieldName周围使用带引号或不带引号