首页 > 解决方案 > 创建多语句用户定义函数时,BEGIN 附近的语法不正确

问题描述

我正在尝试generate_series在 SQL Server 中为DATE如下类型重新创建 PostgreSQL 函数

CREATE OR ALTER FUNCTION dbo.generateDatesBetween(@startdate DATE, @enddate DATE)
RETURNS TABLE (date DATE)
AS BEGIN
    DECLARE @res TABLE(date DATE);
    WHILE @startdate <= @enddate
        BEGIN
            INSERT @res(date) VALUES(@startdate)
            SET @startdate = DATEADD(DAY,1,@startdate)
        END;
    RETURN @res
END;

但它一直显示这个错误

[S0001][156] 关键字“BEGIN”附近的语法不正确

在此之前我尝试过创建许多函数,但它与BEGIN关键字一起工作得很好。

有谁知道如何解决这个问题?谢谢

标签: sqlsql-servertsql

解决方案


您可以像下面这样修改函数以使其工作。您不能在表值用户定义函数中使用带有 RETURN 关键字的表变量。您只能在标量用户定义函数中执行此操作。

CREATE FUNCTION dbo.generateDatesBetween(@startdate DATE, @enddate DATE)
RETURNS @res TABLE(date DATE)
AS BEGIN
    WHILE @startdate <= @enddate
        BEGIN
            INSERT @res(date) VALUES(@startdate)
            SET @startdate = DATEADD(DAY,1,@startdate)
        END;
    RETURN;
END;

推荐阅读