我正在尝试将我编写的拆分函数应用到表中的一个特定行。后来,我想将该函数应用于整个列,但第一步遇到了问题。
我基本上尝试了下面的所有变体。
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
,或者名称不明确。
如果有人可以提供任何反馈或帮助,我将非常感激!
最佳答案
我假设您的分割函数是表值函数
那么您需要一个CROSS APPLY
(使用OUTER APPLY
来查看空值)
示例
Select A.*
,B.*
From [dbo].[Menu] A
Cross Apply dbo.Split(SalesPersons, ',') B
Where ID = '1234'
and APPLICANT = 'JohnSmith'
EDIT - If you want the split values in one row
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
关于sql-server - 将函数应用于列中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53972043/