我有一个列(myColumn)作为表(tableA)的主键。 我注意到2或3个表将myColumn作为外键引用。 如何检测所有使用和引用myColumn的表?
我猜测超过3个表使用myColumn,因为当我尝试像这样更新它时
UPDATE tableA
SET myColumn = 1
WHERE myColumn = 1
更新了6行。
之前建议我使用
sp_helpconstraint('your_table_name')
但我发现这并没有提供我需要的完整信息。
还有其他建议吗?
答案 0 :(得分:3)
试试这个 - 这是Mitch链接到的最新版SQL Server 2005和我原来答案的更新版本(适用于SQL Server 2000):
SELECT
ConstraintName = fk.name,
TableName = t.name,
ColumnName = c.name
FROM
sys.foreign_keys fk
INNER JOIN
sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
INNER JOIN
sys.tables t ON fk.parent_object_id = t.object_id
INNER JOIN
sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id
INNER JOIN
sys.tables tref ON fk.referenced_object_id = tref.object_id
INNER JOIN
sys.columns cref ON fkc.referenced_object_id = cref.object_id AND fkc.referenced_column_id = cref.column_id
WHERE
tref.Name = 'Person'
AND cref.Name = 'OID'
它使用系统目录视图sys.foreign_keys
和sys.foreign_key_columns
来查找哪些表/列引用了您感兴趣的表和列。
您只需输入WHERE
子句中的表名和列名 - 然后获取引用该表/列的其他表/列的列表
答案 1 :(得分:1)
如果您安装Redgate的免费sql搜索工具,您可以轻松地在数据库模式中搜索表和列名等字符串。
http://www.red-gate.com/products/sql-development/sql-search/
还有其他方法可以使用系统表搜索架构,但我强烈推荐使用此工具。如果您不断对大型数据库进行逆向工程,它将成为您日常工作流程的一部分。