将SQL函数应用于表列值

时间:2013-07-08 21:20:15

标签: sql-server sql-server-2008 tsql sql-function

我有一个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

在输出中,我只看到IDDescr列,即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

1 个答案:

答案 0 :(得分:1)

您的函数返回一个表 - SimpleSplit结果表的列名是什么?您必须在select语句中包含该列名。

OUTER APPLY已应用,但未选择结果。