我正在尝试将我编写的拆分功能应用于表中的特定行。稍后,我想将函数应用于整个列,但是第一步遇到了麻烦。
我基本上已经尝试了下面的每个变体。
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
,或者名称不明确。
如果任何人都可以提供任何反馈或帮助,我将非常感谢!
答案 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