如何在SQLServer中获取过程中函数的递归列表?

如何在SQLServer中获取过程中函数的递归列表?,sql,sql-server,recursion,Sql,Sql Server,Recursion,我有一个程序列表,我可以得到这些程序中的函数列表 但是我需要创建一种递归方法来查看这些函数中是否有函数。我是这样开始的: select referencing_id, object_name(referencing_id) as referencing_object_name, object_name(sed.referenced_id) as referenced_object_name from sys.sql_expression_dependenc

我有一个程序列表,我可以得到这些程序中的函数列表

但是我需要创建一种递归方法来查看这些函数中是否有函数。我是这样开始的:

select  referencing_id,
        object_name(referencing_id) as referencing_object_name,
        object_name(sed.referenced_id) as referenced_object_name
from    sys.sql_expression_dependencies as sed
inner join sys.objects as obj
on      sed.referencing_id = obj.object_id
inner join #temp a
on      a.procedure_name = object_name(referencing_id)
where   referenced_entity_name in (select name
                                   from   sys.objects
                                   where  type_desc like '%function%')
order by referencing_object_name
这段代码给了我一个过程和函数的列表

我怎样才能在这里更进一步,确保我在这里找到的函数上进行递归,这样,如果这些函数中有函数,我也能看到它

注意:我不需要对实际过程进行递归。程序清单已经是我需要的所有程序。我只是在函数中查找函数


谢谢你的帮助

你可以用程序查询的方法来做,而不是临时a,因为你没有说,我不知道那是什么。因此,您将连接引用类型为函数的sys.objects,并在引用类型也是函数的情况下自连接它。以下是已更新的查询,仅适用于函数:

select  referencing_id,
        object_name(referencing_id) as referencing_object_name,
        object_name(sed.referenced_id) as referenced_object_name
from    sys.sql_expression_dependencies as sed
inner join sys.objects as obj
on      sed.referencing_id = obj.object_id
inner join sys.objects a
on      a.name = object_name(referencing_id) and a.type_desc like '%function%'
where   referenced_entity_name in (select name
                                   from   sys.objects
                                   where  type_desc like '%function%')
order by referencing_object_name
如果您想获得过程引用的函数列表,该列表引用其他函数,它可以如下所示:注意:我不是100%确定这是最好的方法:

select  referencing_id,
        object_name(referencing_id) as referencing_object_name,
        object_name(sed.referenced_id) as referenced_object_name
from    sys.sql_expression_dependencies as sed
inner join sys.objects as obj
on      sed.referencing_id = obj.object_id
inner join sys.objects a
on      a.name = object_name(referencing_id) and a.type_desc like '%function%'
where   referenced_entity_name in (select name
                                   from   sys.objects
                                   where  type_desc like '%function%')
        and object_name(sed.referenced_id) in (select  object_name(sed.referenced_id) as referenced_object_name
                                        from    sys.sql_expression_dependencies as sed
                                        inner join sys.objects as obj
                                        on      sed.referencing_id = obj.object_id
                                        inner join sys.procedures a
                                        on      a.name = object_name(referencing_id)
                                        where   referenced_entity_name in (select name
                                                                           from   sys.objects
                                                                           where  type_desc like '%function%'))