我有一个表,名为Member
,列名为Member_Id
。获取所有从属表的所有外键的一个表到第n级
此表由超过23个其他表作为主表推荐,Member_Id
作为外部列。
现在这23个表也有主键,有些还可以作为其他表的主表。
所以我想要提取所有依赖表的所有外键参考表Member
。
我的目标是截断有外码的Member
表。我无法使用删除功能,因为这些表格有更多数据,所以删除数据可能需要很长时间。
例如: -
会员 - >会员-ID
Member-Contact
与Member
表连接使用Member_ID,主键Contact_No
Member_Population
与Member
表使用Member_ID连接,主键population_seq_no
... 23更多
这些Member-Contact
,Member_Population
和23更多也有依赖表与其他表作为外键。
所以在截断之前,我需要删除所有外键然后截断所有这些从属表然后恢复这些外键。
直到现在我写此查询其获取所有外键一个表
SELECT ROW_NUMBER() Over(Order BY f.parent_object_id) as RowID,
OBJECT_NAME(f.parent_object_id) TableName,
COL_NAME(fc.parent_object_id,fc.parent_column_id) ColName,
f.name as FKConstraintName,
COL_NAME(fc.referenced_object_id,fc.referenced_column_id) as ReferenceColName
--INTO #temp_ReferenceContstraints
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN sys.tables t ON t.OBJECT_ID = fc.referenced_object_id
WHERE OBJECT_NAME (f.referenced_object_id) = 'Member'
我想找到所有相关表的外键?
为什么你不使用'sql server'中所有依赖表的用户界面? – 2015-03-13 13:12:29
http://blog.sqlauthority.com/2010/02/04/sql-server-get-the-list-of-object-dependencies-sp_depends-and-information_schema-routines-and-sys-dm_sql_referencing_entities/ – 2015-03-13 13:20:34
那么你可以获取您所查询的结果,在结果上运行游标并在每个表上运行相同的查询;你可以递归地设置它,以便它达到N级。 – 2015-03-13 13:26:48