gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:24:46 25 4
gpt4 key购买 nike

我正在 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 中使用递归表值函数吗?

我在 google 中搜索,发现标量值递归函数是可能的?

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

感谢任何帮助!

最佳答案

回答:

您以错误的方式调用了 fnSplit2。表值函数正是:一个“表”...它位于 FROM 子句中“真实”表所在的位置。

评论:

如果您真的必须在 SQL 中拆分 CSV,请阅读 Erland Sommarskog's article以各种方式正确地做到这一点。请注意,他没有列出递归 TVF 方法...

关于sql - 如何在 SQL SERVER 2005 中使用递归表值函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/959893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com