SQL 其他数据库中的服务器依赖项

SQL Server Dependencies in Other Databases

我想做什么: 我正在尝试获取视图、存储过程等及其依赖项的列表。

例如,我有一个名为 [sp_1] 的存储过程,要生成 [sp_1],我需要 table_1view_1view_2.

我正在使用下面的查询,它似乎大部分都有效;但是,如果我的 [referenceing_object_name](又名 [sp_1])使用另一个数据库中的对象,它们不会出现在我的查询中。

所以如果我有

[db_1].[dbo].[sp_1]

由以下组成

[db_1].[dbo].[table_1]
[db_1].[dbo].[view_1]
[db_2].[dbo].[view_2]

它只会在我的结果中显示 [db_1].[dbo].[table_1][db_1].[dbo].[view_1]

关于如何获取出现在其他数据库中的对象有什么建议吗?

select top 100
    [sed_objects_depend_on].[referencing_id]
    ,[s].[name] as [schema_name]
    ,[o_referencing].[name] as [referencing_object_name]
    ,[o_referencing].[type_desc] as [referencing_type_desc]
    ,[sed_objects_depend_on].[Referenced_Database_Name]
    ,[sed_objects_depend_on].[referenced_schema_name]
    ,[sed_objects_depend_on].[Referenced_Entity_Name]
    ,[sed_objects_depend_on].[Referenced_ID]
    ,[o_referenced].[name] as [referenced_object_name]
    ,[o_referenced].[type_desc] as [referenced_type_desc]
from
    [sys].[sql_expression_dependencies] as [sed_objects_depend_on]
------------------------
inner join
    [sys].[objects] as o_referencing
    on
        o_referencing.[object_id] = [sed_objects_depend_on].[referencing_id]
------------------------
inner join
    [sys].[objects] as o_referenced
    on
        o_referenced.[object_id] = [sed_objects_depend_on].[referenced_id]
------------------------
inner join
    [sys].[schemas] as s
    on
        o_referencing.[schema_id] = s.[schema_id]
------------------------
where
    [sed_objects_depend_on].[Referencing_ID] IN 
    (
        '657437416'
        -----
        ,'1823514471'
        ,'1467672822'
        ,'233468306'
    ) 
order by
    --[sed_objects_depend_on].[Referenced_Entity_Name]
    [o_referencing].[name]
    ,[sed_objects_depend_on].[Referenced_Entity_Name];

试试这个

 SELECT Object_name (referencing_id),
       referenced_database_name,
       referenced_schema_name,
       referenced_entity_name
FROM   sys.sql_expression_dependencies
WHERE  referenced_database_name IS NOT NULL;  

看看你得到了什么。