pri*_*kar 2 sql t-sql recursion sql-server-2005 user-defined-functions
我在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
Run Code Online (Sandbox Code Playgroud)
错误是:消息102,级别15,状态1,过程fnSplit2,行38'fnSplit2'附近的语法不正确.
我不能在SQL SERVER中使用递归表值函数吗?
我在谷歌搜索,发现Scalar值得递归函数是可能的吗?
请提供代码,同时告诉我我犯的错误.
感谢任何帮助!
回答:
你以错误的方式调用fnSplit2.一个表值函数正是这样的:一个"表"......它就是一个"真实"表将进入FROM子句的地方.
评论:
如果您真的必须在SQL中拆分CSV,请阅读Erland Sommarskog关于正确执行此操作的各种方法的文章.请注意,他没有列出递归的TVF方法......