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)
使用 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)