2013-07-08 42 views
0

我有一个Transact SQL函数SimpleSplit,它根据分隔符分割字符串。将SQL函数应用于表列值

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

你的函数返回一个表 - SimpleSplit结果表的列名是什么?你不需要在你的select语句中包含那个列名吗?已应用“外部应用”,但未选择结果。 –

+0

哇**先生**。感谢您的快速答复。我希望你已经把你的评论作为答案,以便我可以将其标记为这样。 –

回答

1

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

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