【发布时间】:2015-11-06 15:52:37
【问题描述】:
我正在尝试将表变量与表值函数一起使用,但出现语法错误。请帮我解决这个问题。
代码如下:
Create FUNCTION [dbo].[SplitStrings1]
(@List NVARCHAR(MAX),
@Delimiter NVARCHAR(255))
RETURNS @Results TABLE(Col1 int)
AS
BEGIN
declare @tblHelping table (Col1 int);
declare @i int
declare @rows_to_insert int
set @i = 1
set @rows_to_insert = 1000
while @i < @rows_to_insert
begin
INSERT INTO @tblHelping VALUES (@i)
set @i = @i + 1
end
(SELECT
Number = ROW_NUMBER() OVER (ORDER BY Number),
Item FROM (SELECT Number, Item = LTRIM(RTRIM(SUBSTRING(@List, Number,
CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number)))
FROM
(SELECT * FROM @tblHelping) AS n(Number)
WHERE
Number <= CONVERT(INT, LEN(@List))
AND SUBSTRING(@Delimiter + @List, Number, 1) = @Delimiter) AS y)
END
我收到了这个错误
在此上下文中不能使用具有返回值的 RETURN 语句。
【问题讨论】:
-
那是你的完整代码吗?我没有看到
RETURN声明。 -
这似乎是一种拆分分隔字符串的尝试。从性能的角度来看,while 循环方法是绝对最糟糕的方法。使用它会削弱您的查询。查看这篇文章,了解一些更好的选择。 sqlperformance.com/2012/07/t-sql-queries/split-strings
-
如果你真的收到这个错误信息,只需删除 RETURN-Statement 后面的数字即可。所以如果你有 RETURN 0 就写 RETURN
-
函数中包含的 Select 语句无法将数据返回给客户端。 @Results 在哪里插入?
-
@GordonLinoff:是的,这是完整的代码。如果我尝试添加 Return 语句,则会收到另一个错误,即“不能在此上下文中使用具有返回值的 RETURN 语句。”
标签: sql sql-server tsql sql-server-2012