繁体   English   中英

如何在SQL SERVER 2005中使用递归表值函数

[英]How to use recursive table valued function in SQL SERVER 2005

我在SQL Server 2005中创建拆分功能。

我已经通过使用while循环做到了。

但是我对此不满意。 我想使用递归函数。

我已经用C#完成了。 现在,我在SQL SERVER 2005中绘制了相同的图形。但是却遇到了编译错误。

这是我的代码

ALTER FUNCTION [dbo].[fnSplit2] 
(

    @OLDSTRING AS VARCHAR(100),
    @DELIMETER AS VARCHAR(1)
)

RETURNS @MYTABLE TABLE(COUNTER INT,STRINGVAL VARCHAR(100)) 
    AS
        Begin 

            DECLARE @NEWSTRING AS VARCHAR(100)
            DECLARE @POS AS INT
            DECLARE @LEN AS INT
            DECLARE @COUNTER AS INT 

            SET @NEWSTRING = '';        
            SET @LEN = LEN(@OLDSTRING)
            SET @COUNTER = 0
            SET @POS = CHARINDEX(@DELIMETER, @OLDSTRING) 

            IF(@POS > 0)

                BEGIN 

                    SET @COUNTER = @COUNTER +1

                    INSERT INTO @MYTABLE(COUNTER,STRINGVAL) VALUES(@COUNTER,@NEWSTRING + SUBSTRING(@OLDSTRING,0, @POS))
                    SET @OLDSTRING = SUBSTRING(@OLDSTRING,0, @POS)
                    fnSplit2(@OLDSTRING,@DELIMETER);

                END

            ELSE

                BEGIN
                    SET @COUNTER = @COUNTER +1
                    INSERT INTO @MYTABLE(COUNTER,STRINGVAL) values(@COUNTER,@OLDSTRING)
                END

    RETURN
END

错误是:消息102,级别15,状态1,过程fnSplit2,第38行'fnSplit2'附近的语法不正确。

我不能在SQL SERVER中使用递归表值函数吗?

我在谷歌搜索,发现标量值的递归函数是可能的吗?

请提供代码,同时告诉我所犯的错误。

感谢您的帮助!

回答:

您以错误的方式调用fnSplit2。 表值函数的确切含义是:“表” ...在FROM子句中可以到达“实际”表的位置。

评论:

如果您真的必须在SQL中拆分CSV,请阅读Erland Sommarskog的文章 ,以了解各种正确执行方法。 请注意,他没有列出递归TVF方法...

另外,您可能还需要在引用中使用架构名称:“ dbo.fnSplit2(..)”。 并且如前所述,将其用作表参考。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM