Sql 我希望我的函数返回一个表,其中包含
我得到以下错误: Msg 208,16级,状态6,fnToken程序,第24行 无效的对象名称“dbo.fnToken” 我试着把所有的号码都退了Sql 我希望我的函数返回一个表,其中包含,sql,sql-server,Sql,Sql Server,我得到以下错误: Msg 208,16级,状态6,fnToken程序,第24行 无效的对象名称“dbo.fnToken” 我试着把所有的号码都退了 select dbo.fnToken('#254#251451#') ALTER FUNCTION dbo.fnToken ( @Token varchar(100) ) RETURNS @Listenum TABLE(num varchar(50)) AS begin declare @compt int declare @num varch
select dbo.fnToken('#254#251451#')
ALTER FUNCTION dbo.fnToken
(
@Token varchar(100)
)
RETURNS @Listenum TABLE(num varchar(50))
AS
begin
declare @compt int
declare @num varchar(50)
set @compt = 1
while SUBSTRING(@token,@compt,1)<>''
begin
if SUBSTRING(@Token,@compt+1,@compt)<>'#'
begin
set @num= @num+SUBSTRING(@Token,@compt+1,1)
set @compt=@compt+1
end
else
begin
Insert into @Listenum(num) values(@num)
end
end
Return (SELECT num FROM @Listenum)
ENd
这是预期输出:
254
251451
不能像标量函数那样引用表值函数。但这是一种非常糟糕的方法,因为它是迭代的,所以要将值从分隔值中分离出来。如果您使用的是SQL Server 2016+,请使用或字符串分割 如果您使用的是STRING_SPLIT,则正确的语法为:
SELECT SS.[value] AS num
FROM STRING_SPLIT(''#254#251451#','#') SS
WHERE SS.[value] != '';
如果您不在SQL Server 2016+上,则DelimitedSplit8K_LEAD的语法相同
编辑:Op使用的是一个旧的、即将完全不受支持的SQL Server版本,因此他们需要使用。您可以尝试:
SELECT value
FROM STRING_SPLIT('#254#251451#', '#')
WHERE TRIM(value) <> '';
根据您的SQL Server版本,它是一个内置函数。如果您使用的是旧版本,请查看此处的字符串拆分函数。有很多选择。这里有一个解决方案。希望能帮上忙,我的朋友: 我添加了更多@separator参数,您可以通过固定值来删除它
ALTER FUNCTION dbo.fnToken
(
@stringToSplit VARCHAR(MAX), @separator nchar(1)
)
RETURNS @Listenum TABLE(num varchar(50))
AS
begin
DECLARE @name NVARCHAR(255)
DECLARE @pos INT
WHILE CHARINDEX(@separator, @stringToSplit) > 0
BEGIN
SELECT @pos = CHARINDEX(@separator, @stringToSplit)
SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @Listenum
SELECT @name
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
END
INSERT INTO @Listenum
SELECT @stringToSplit
Return
ENd
SELECT num
FROM dbo.fnToken('#254#251451#', '#')
WHERE TRIM(num) <>''
你就不能把它们换掉吗?对于错误,只需修复select dbo.fnToken'254251451'您没有指定从dbo.fnToken中选择什么。我想用表函数返回该令牌中的数字@YounesHarir的版本是什么?我是Sql server 2008R2用户,所以我想这些函数对我不起作用,2008R2还有5天的支持期,@YounesHarir,你真的应该看看更新。