如何在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%'))