SQL Server测试参照完整性

时间:2014-10-29 15:10:56

标签: sql sql-server-2008

我有一个包含2K +表的数据库。我需要检查一个表中的行是否被任何其他表使用(所有关系都已启动并且正在运行ID)。只有我的想法是

BEGIN TRY
 BEGIN TRANSACTION
  DELETE dbo.LC147_PlanProracuna WHERE PlanProracunaID = 47
  SELECT 1
 ROLLBACK
END TRY
BEGIN CATCH
 SELECT 0
END CATCH

如何检查表A中的行是否正在数据库中的任何其他表中使用,或者(甚至更好)SQL SERVER如何检查参照完整性(如果可能的话,如何使用相同的方法)?

1 个答案:

答案 0 :(得分:2)

如果您正在讨论在表之间找到依赖关系,那么您可以使用sys.dm_sql_referencing_entities以及 sys.dm_sql_referenced_entities为此目的。

下面的示例将返回指定数据库中引用LC147_PlanProracuna表的实体。

SELECT referencing_schema_name, 
referencing_entity_name, 
referencing_id, 
referencing_class_desc, 
is_caller_dependent
FROM sys.dm_sql_referencing_entities ('DB_NAME.dbo.LC147_PlanProracuna', 'OBJECT');

您也可以This Article找到帮助。