我有一个Transact SQL函数SimpleSplit
,它根据分隔符拆分字符串。我可以按如下方式使用它:
DECLARE @DelimitedString NVARCHAR(128)
SET @DelimitedString = 'Processor,RAM,SSD,Ethernet'
SELECT * FROM [dbo].[SimpleSplit](@DelimitedString, ',')
这导致:
Processor
RAM
SSD
Ethernet
正如所料。
我现在有一个名为PROD_TABLE
的表,其中包含Descr
列。我想将此函数应用于列Descr
中的每个值。我尝试了以下内容,但它不起作用:
SELECT p.[ID], p.[Descr]
FROM [Amazon].[dbo].[PROD_TABLE] p
OUTER APPLY [dbo].[SimpleSplit](p.Descr, '-') d
在输出中,我只看到ID
和Descr
列,即SimpleSplit
函数没有结果。但是,如果我尝试
SELECT *
FROM [Amazon].[dbo].[PROD_TABLE] p
OUTER APPLY [dbo].[SimpleSplit](p.Descr, '-') d
我在最后一列中看到了SimpleSplit
函数的结果。为什么此查询应用该函数,但之前的查询不适用?
答案
感谢下面的 mr.Rebands 回答,我意识到我需要为结果命名。因此*工作,但明确命名列我需要做的事情:
SELECT p.[ID], p.[Descr], d.[Data]
FROM [Amazon].[dbo].[PROD_TABLE] p
OUTER APPLY [dbo].[SimpleSplit](p.[Descr], '-') d
答案 0 :(得分:1)
您的函数返回一个表 - SimpleSplit
结果表的列名是什么?您必须在select语句中包含该列名。
OUTER APPLY
已应用,但未选择结果。