2017-02-28 68 views
0

我试图选择数据库中所有函数及其依赖项的列表。所有(用户定义的标量)函数及其依赖项的列表

我的主要问题越来越所有依赖(的,如果我是手动查看的依赖关系,并选择选项“依赖于[功能]物体”,将出现的依赖关系。)卷起成一个每行功能。

我试过使用stuff,但由于某种原因,我不能在这方面得到它的工作。

select 
    o.name 
    , stuff((select N', ' + Name from sys.objects o3 where o3.object_id = o2.object_id for xml path ('')), 1, 1, N'') as Dependencies 
from sys.objects o 
    left join sys.sql_expression_dependencies sed 
    on object_id = referenced_id 
    left join sys.objects o2 
    on referencing_id = o2.object_id 
where o.type='FN' 
order by o.name 

我在哪里出错了?

+0

你有多少标量函数?这对我来说是个问题,因为从性能的角度来看,标量函数是非常糟糕的。 –

+0

有500多个,我完全同意。我正在清理它们,首先删除大多数没有依赖关系的函数。 –

回答

3

这可能会为你工作:

SELECT 
    O.Name 
    ,T.Dependencies 
FROM sys.Objects O 
OUTER APPLY 
(
    SELECT SUBSTRING(
     (
     SELECT ',' + OBJECT_NAME(D.referenced_id) 
     FROM sys.SQL_Expression_Dependencies D 
     WHERE D.referencing_id = O.Object_ID 
     GROUP BY OBJECT_NAME(D.referenced_id) 
     ORDER BY OBJECT_NAME(D.referenced_id) 
     FOR XML PATH('') 
     ) 
    ,2,4000) AS Dependencies 
) T 
WHERE O.Type = 'FN' 
ORDER BY O.Name 
; 

如果不是这样,我更新大约缺少什么,我可以从那里。祝你好运! :)

+0

谢谢,但我正在寻找依赖[函数]的对象。而不是[函数]依赖的对象。奇怪的是,我已经设法使用'stuff'来工作,但没有问题。 –

+1

我*几乎*问你想让它走哪个方向,但感觉很傻......只是去显示骄傲的问题之前的骄傲。很高兴你得到了答案,无论如何。有一个很好的:) – 3BK

+0

我设法通过交换referencing_id与referenced_id所需的结果。查询很慢,但这对我的目的无关紧要。在这种情况下,为什么需要'outer apply'? –

相关问题