首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在存储过程中调用此函数?

如何在存储过程中调用此函数?
EN

Stack Overflow用户
提问于 2010-09-09 00:40:51
回答 3查看 131关注 0票数 0

我从这里的某人那里得到了这个函数:

代码语言:javascript
运行
复制
    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子句中,我像这样调用这种类型的函数:

代码语言:javascript
运行
复制
WHERE u.[Fleet] IN (SELECT [VALUE] FROM dbo.udf_GenerateVarcharTableFromStringList(@Fleets, ','))   

如何以类似的方式调用上述函数?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-09 00:42:53

您可能希望将值替换为s。

票数 3
EN

Stack Overflow用户

发布于 2010-09-09 00:55:39

因为你说的结果是:

代码语言:javascript
运行
复制
SELECT * FROM dbo.fnSplitString('abc,def', ',')

是正确的,那么很可能一切都应该正常工作。检查当您有一个空标记(两个相邻的逗号)时会发生什么,并查看结果是否如您所预期的那样。

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

票数 1
EN

Stack Overflow用户

发布于 2010-09-09 00:59:31

该函数不会删除前导/尾随空格,因此如果你有一个字符串'a,b,c‘和一个分隔符',’,你会得到一个包含'a',‘b',’c‘的表。这在您的u.Fleet中是否匹配

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3669973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档