2

我有一个 Transact SQL 函数SimpleSplit,它根据分隔符拆分字符串。我可以按如下方式使用它:

 DECLARE @DelimitedString NVARCHAR(128)
 SET @DelimitedString = 'Processor,RAM,SSD,Ethernet'
 SELECT * FROM [dbo].[SimpleSplit](@DelimitedString, ',')

这导致:

Processor
RAM
SSD
Ethernet

正如预期的那样。

我现在有一个名为PROD_TABLEcolumn的 Table Descr。我想将此函数应用于 column 中的每个值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
4

1 回答 1

1

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

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

于 2013-07-08T21:34:04.097 回答