SQLServer - 如何在我的表上查找依赖表?

Yug*_*dle 6 sql database relational-database sql-server-2008

使用SQLServer:

我有一张桌子user:

  • id

  • name

  • email

还有一些其他表(大约200多个表),其中一些user.id用作外键cascade delete.

所以,我想找出 - 哪些表使用这个外键(user.id)?

我正在访问我的sql-server SQL Server Management Studio.

小智 14

获取ONLY TABLE引用的方法(即使用给定表作为外键的表和给定表使用相同方式的表)可以使用此代码段:

declare @tableName varchar(64);
set @tableName = 'TABLE';

select
SO_P.name as [parent table]
,SC_P.name as [parent column]
,'is a foreign key of' as [direction]
,SO_R.name as [referenced table]
,SC_R.name as [referenced column]
,*
from sys.foreign_key_columns FKC
inner join sys.objects SO_P on SO_P.object_id = FKC.parent_object_id
inner join sys.columns SC_P on (SC_P.object_id = FKC.parent_object_id) AND (SC_P.column_id = FKC.parent_column_id)
inner join sys.objects SO_R on SO_R.object_id = FKC.referenced_object_id
inner join sys.columns SC_R on (SC_R.object_id = FKC.referenced_object_id) AND (SC_R.column_id = FKC.referenced_column_id)
where
    ((SO_P.name = @tableName) AND (SO_P.type = 'U'))
    OR
    ((SO_R.name = @tableName) AND (SO_R.type = 'U'))
Run Code Online (Sandbox Code Playgroud)


Edw*_*ing 13

在SQL Server管理工作室中,您可以在对象资源管理器中右键单击表,然后选择"查看依赖项".这将打开一个新窗口,您可以在其中查看依赖于您的表以及表所依赖的所有其他对象(不仅仅是表).


小智 5

这是我部分基于上述答案整理的存储过程。

-- =============================================
-- Author:      R. Mycroft
-- Create date: 2012-08-08
-- Description: Lists foreign keys to & from a named table.  
-- (Have yet to find this one via Google!)
-- =============================================
alter procedure usp_ListTableForeignKeys 
    @tableName varchar(300) = ''
as
begin
set nocount on;

select 
    object_name(parent_object_id) as childObjectName
    , object_name(referenced_object_id) as parentObjectName
    , name, type_desc, create_date
from sys.foreign_keys
where object_name(parent_object_id) = @tableName
or object_name(referenced_object_id) = @tableName
end
Run Code Online (Sandbox Code Playgroud)


Hum*_*bir 5

使用 SSMS 图形用户界面:

查看表依赖关系

在 SQL Server Management Studio (SSMS) 中,您可以右键单击表并选择“查看依赖关系”。这将打开一个新窗口,您可以在其中看到依赖于您的表以及您的表也依赖于的所有对象。

依赖项列表

另外,如果您想使用 TSQL 执行此操作,其中所有对象都依赖于您的表

方法1:使用sp_depends存储过程,虽然sql server团队将在未来版本中删除此功能,但它仍然有助于获取指定对象的所有依赖关系,包括表,视图,存储过程,约束等,sql服务器团队建议使用 sys.dm_sql_referencing_entities 和 sys.dm_sql_referenced_entities 代替。

-- Query to find Table Dependencies in SQL Server: 
EXEC sp_depends @objname = N'dbo.aspnet_users' ;
Run Code Online (Sandbox Code Playgroud)

方法2:

-- Query to find Table Dependencies in SQL Server: 
    SELECT referencing_id, 
       referencing_schema_name, 
       referencing_entity_name 
FROM sys.dm_sql_referencing_entities('dbo.aspnet_users', 'OBJECT');
Run Code Online (Sandbox Code Playgroud)

方法 3:查找函数、过程和视图中的表依赖关系

SELECT *
    FROM sys.sql_expression_dependencies A, sys.objects B
    WHERE referenced_id = OBJECT_ID(N'dbo.aspnet_users') AND 
        A.referencing_id = B.object_id
Run Code Online (Sandbox Code Playgroud)

方法 4:

-- Value 131527 shows objects that are dependent on the specified object
EXEC sp_MSdependencies N'dbo.aspnet_users', null, 1315327
Run Code Online (Sandbox Code Playgroud)

如果你想获取你的表所依赖的所有对象。

-- Value 1053183 shows objects that the specified object is dependent on
EXEC sp_MSdependencies N'dbo.aspnet_users', null, 1053183 
Run Code Online (Sandbox Code Playgroud)