将函数应用于列中的一行

时间:2018-12-29 18:01:10

标签: sql-server function split

我正在尝试将我编写的拆分功能应用于表中的特定行。稍后,我想将函数应用于整个列,但是第一步遇到了麻烦。

我基本上已经尝试了下面的每个变体。

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 :(得分:3)

我假设您的拆分函数是一个表值函数

然后您将需要一个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