2013-07-08 98 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已應用,但未選擇結果。