其他数据库中的 SQL Server 依赖关系

Posted

技术标签:

【中文标题】其他数据库中的 SQL Server 依赖关系【英文标题】:SQL Server Dependencies in Other Databases 【发布时间】:2021-04-15 01:15:18 【问题描述】:

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

例如,我有一个名为[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];

【问题讨论】:

这也许就是您要找的东西? ***.com/questions/720339/… 不,我正在尝试查看依赖项,而不是跨服务器查询。 试试这个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;,看看你会得到什么。 好像成功了,我得做相应的调整。 当我在 2 个不同的数据库中查询相同的 object_id 时,我有 2 个具有相同 object_id 的对象。这使得加入reference_id 很难得到object_name。有什么建议吗? 【参考方案1】:

试试这个

 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;  

看看你会得到什么。

【讨论】:

以上是关于其他数据库中的 SQL Server 依赖关系的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 作业中的大型机作业依赖性

SQL Server 中的 sp_depends,都有哪些可能的依赖关系?

SQL Server:使用 FK 删除表

如何在 SQL Server 中查找外键依赖项?

sql MSSQL:报告所有数据库对象,这些对象没有其他任何依赖于它们 - 数据库中的任何其他对象都没有引用它们

请问SQL server 中的主键和外键的作用