如何在sproc中调用此函数?

时间:2010-09-08 16:40:51

标签: sql sql-server sql-server-2005

我从这里有人那里得到了这个功能:

    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 
  ) 

通常在sprocs的子句中我称之为这种类型的函数:

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

如何以类似的方式调用上述功能?

谢谢!

3 个答案:

答案 0 :(得分:3)

您希望将[value]替换为[s]。

答案 1 :(得分:1)

既然你说的结果是:

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

是正确的,那么一切都应该有效。检查当您有一个空令牌(两个相邻的逗号)时会发生什么,并查看结果是否符合您的预期。

另外,我注意到输入字符串的长度有效限制。检查以确保没有任何东西被切断。

答案 2 :(得分:0)

该函数不会删除前导/尾随空格,因此如果您有一个字符串'a,b,c'和一个分隔符','您将获得一个包含'a','b','c'的表格。这与你的匹配。[Fleet]?