Сообщение 4104, уровень 16, состояние 1, строка 8 Не удалось связать идентификатор из нескольких частей «xx.ParseThis» - PullRequest
0 голосов
/ 15 ноября 2018

Ниже приведена очень сокращенная версия того, что я пытаюсь сделать.

Я знаю, что 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 голосов
/ 15 ноября 2018

Поместите вторую строковую строку следующим образом

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

Попробуйте с и без кавычек вокруг ParseThis FieldName

0 голосов
/ 15 ноября 2018

Вы пытаетесь присоединиться к выражению 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] 
0 голосов
/ 15 ноября 2018

Я верю, потому что ваш запрос не может найти "xx.ParseThis" внутри вашего "От" выбора / назначения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...