Применение функции к одной строке в столбце - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь применить функцию разделения, которую я написал, к одной конкретной строке в таблице.Позже я хотел бы применить функцию ко всему столбцу, но у меня возникли проблемы с первым шагом.

Я в основном попробовал все варианты ниже.

SalesPersons - это столбец, к которому я хочу применить функцию разделения.

SELECT ID,
       (SELECT ITEM
        FROM  [dbo].[Split](SalesPersons, ','))
FROM   [dbo].[Menu]
WHERE  ID = '1234'
       AND APPLICANT = 'JohnSmith'

SELECT * dbo.Split(SalesPersons, ',')
FROM   [dbo].[Menu]
WHERE  ID = '1234'
       AND APPLICANT = 'JohnSmith'

Я получаю следующий результат:

Невозможно найти ни столбец dbo, ни пользовательскую функцию, ни агрегат dbo.Split, либо имя неоднозначное.

Если кто-то может предоставить какую-либо обратную связь или помощь, я был бы признателенэто так много!

1 Ответ

0 голосов
/ 29 декабря 2018

Я предполагаю, что ваша функция разделения является табличной функцией

Тогда вам понадобится CROSS APPLY (используйте OUTER APPLY, чтобы увидеть нулевые значения)

Пример

Select A.* 
      ,B.*
 From [dbo].[Menu] A
 Cross Apply dbo.Split(SalesPersons, ',') B
 Where ID = '1234' 
   and APPLICANT = 'JohnSmith'

РЕДАКТИРОВАТЬ - Если вы хотите разделить значения в одной строке

Select A.*
      ,B.*
 From  [dbo].[Menu] A
 Cross Apply (
                Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(100)')))
                      ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(100)')))
                      ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(100)')))
                      ,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(100)')))
                From  (Select Cast('<x>' + replace((Select replace(A.SalesPersons,',','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
              ) B
...