Sql server Msg 4104,第16级,状态1,第8行多部分标识符“;xx.解析此“文件”;无法约束

Sql server Msg 4104,第16级,状态1,第8行多部分标识符“;xx.解析此“文件”;无法约束,sql-server,ssms,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=NU

下面是我试图做的一个非常简短的版本

我知道
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”


我相信这是因为您的查询无法在“From”选择/目的地中找到“xx.ParseThis”

请输入第二个文本字符串,如下所示

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

尝试在ParseThis字段名前后加引号和不加引号,您将尝试加入表达式dbo.SplitString2(xx.ParseThis,&')

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

联接中涉及的表的定义不能基于其他表的值进行关联(在本例中,示例中只有一行并不重要)

为此,您需要
应用

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] 

谢谢你,马丁。