用于返回递归值的 SQL 函数

标签 sql sql-server

我正在尝试创建一个返回递归值的函数,但出现语法错误。

CREATE FUNCTION getObs
(
    @obs int
)
RETURNS 
WITH ret2 AS(
    SELECT * 
    FROM OBS 
    WHERE OBS_Id = @obs 
    UNION ALL 
    SELECT t.* 
    FROM OBS as t INNER JOIN 
        ret2 r ON t.OBS_Id = r.UnitId
    )  
SELECT * 
FROM ret2 r
WHERE unity_id = 7

最佳答案

RETURNS 指定函数的返回类型,之后您必须定义函数体,如下所示:

CREATE FUNCTION getObs
(
    @obs int
)
RETURNS table -- <-- returns table so it's a table function
as
return  -- <- here's actual return
(
    WITH ret2 AS(
        SELECT * 
        FROM OBS 
        WHERE OBS_Id = @obs 
        UNION ALL 
        SELECT t.* 
        FROM OBS as t INNER JOIN 
            ret2 r ON t.OBS_Id = r.UnitId

        )  
    SELECT * 
    FROM ret2 r
    WHERE unity_id = 7
)

这是一个示例 - sql fiddle demo

关于用于返回递归值的 SQL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19379309/

相关文章:

c# - 使用提供程序 'RsaProtectedConfigurationProvider' 解密失败

sql-server - 在 SQL Server 中查询 json 键名

sql - 聚合 SQL 函数以从每个分组中仅获取一个

sql-server - DAO RecordsAffected 在通路合并后未返回正确的值

mysql - SQL 查询查找事件是否在类别列表中

sql - 从VBA中的数组批量插入到sql中

SQL 数据库设计 : How to get around storing a list?

java - 避免在 Java 中使用大量计数器

sql - 与使用 SQL Server 匹配字符串的 "="类似

sql - 识别是否存在至少具有给定条件的一行