Eve*_*ien 163 .net sql-server foreign-keys
如何在特定列上找到所有外键依赖项?
有哪些不同的替代方案(图形化在SSMS中,SQL Server中的查询/视图,第三方数据库工具,.NET中的代码)?
Joh*_*som 285
以下查询将帮助您入门.它列出了当前数据库中的所有外键关系.
SELECT
FK_Table = FK.TABLE_NAME,
FK_Column = CU.COLUMN_NAME,
PK_Table = PK.TABLE_NAME,
PK_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT
i1.TABLE_NAME,
i2.COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE
i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT
ON PT.TABLE_NAME = PK.TABLE_NAME
Run Code Online (Sandbox Code Playgroud)
您还可以在Database Diagrams中的SQL Server Management Studio中以图形方式查看关系.
And*_*ija 99
尝试: sp_help [table_name]
您将获得有关表的所有信息,包括所有外键
Mic*_*ael 39
因为您的问题是针对单个表,您可以使用:
EXEC sp_fkeys 'TableName'
Run Code Online (Sandbox Code Playgroud)
我在这里找到了它:
我很快找到了我需要的信息.它列出了外键的表,列和名称.
编辑
以下是文档的链接,其中详细说明了可以使用的不同参数:https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-fkeys-transact-sql
小智 28
SELECT f.name AS ForeignKey, OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
Run Code Online (Sandbox Code Playgroud)
我真正喜欢使用的是Red Gate Software的 SQL Dependency Tracker .您可以放入任何数据库对象(如表,存储过程等),然后它将自动绘制依赖于所选项的所有其他对象之间的关系线.
为您的架构中的依赖项提供了非常好的图形表示.
非常感谢约翰·桑塞姆(John Sansom),他的询问非常棒!
另外:您应该在查询末尾添加“AND PT.ORDINAL_POSITION = CU.ORDINAL_POSITION”。
如果主键中有多个字段,则此语句会将相应的字段相互匹配(我有这种情况,您的查询确实创建了所有组合,因此对于主键中的 2 个字段,我有 4 个相应外键的结果) 。
(抱歉,我无法评论约翰的回答,因为我没有足够的声誉点)。