2010-09-08 42 views
0

我從有人在這裏這樣的功能:如何在sproc中調用此函數?

create FUNCTION [dbo].[fnSplitString] (@s varchar(512),@sep char(1)) 
RETURNS table 
AS 
RETURN ( 
    WITH Pieces(pn, start, stop) AS ( 
     SELECT 1, 1, CHARINDEX(@sep, @s) 
     UNION ALL 
     SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1) 
     FROM Pieces 
     WHERE stop > 0 
    ) 
    SELECT pn, 
     SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s 
    FROM Pieces 
) 

通常在存儲過程的條款我稱這種類型的函數是這樣的:

WHERE u.[Fleet] IN (SELECT [VALUE] FROM dbo.udf_GenerateVarcharTableFromStringList(@Fleets, ',')) 

如何去調用上述功能類似的方式?

謝謝!

+0

您也可能希望將列表選擇到表中,然後根據表選擇。通常使用每行評估where子句中的函數。 – StingyJack 2010-09-08 20:42:59

回答

3

你會想用[s]取代[值]。

+0

hmm。當空白加上一個值時,這仍然不會傳遞給我的參數.... dang – user380432 2010-09-08 16:49:28

1

既然你說的結果是:

SELECT * FROM dbo.fnSplitString('abc,def', ',') 

是正確的,那麼很有可能,一切都應該工作。檢查當你有一個空的標記(兩個相鄰的逗號)時會發生什麼,看看結果是否如你所期望的那樣。

此外,我注意到輸入字符串可能有多長時間有效的限制。檢查以確保沒有任何東西被切斷。

+0

列pn - 行1 = 1行2 = 2 coulnm s - 行1 = abc行2 = def – user380432 2010-09-08 16:59:05

0

函數不會刪除前導/尾隨空格,所以如果你有一個字符串'a,b,c'和一個分隔符''',你會得到一個'a','b','c 」。這與你的[艦隊]相匹配嗎?