sql - 创建多语句用户定义函数时,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
关键字一起工作得很好。
有谁知道如何解决这个问题?谢谢
解决方案
您可以像下面这样修改函数以使其工作。您不能在表值用户定义函数中使用带有 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;
推荐阅读
- c++ - uv_ip4_name 总是得到 127.0.0.1
- css - 容器使用最大高度和最小高度自动调整高度
- powershell - Set-Clipboard 仅在快速连续调用时记住最后一个值
- python - 带有张量流的拥抱脸转换器将两个文件保存为模型权重
- python - 在 Scikit 中使用管道输入值
- android - android.view.InflateException 崩溃:二进制 XML 文件第 49 行:二进制 XML 文件第 49 行:膨胀类 ImageView 时出错
- azure-data-explorer - 了解 Kusto 函数处理的范围数
- redis - 如何使用 redis cli 不断地从流中消费和输出消息?
- zig - 从另一个 zig 包导入 zig 包
- electron - 内存限制是什么?