2014-10-29 63 views
0

我有一个2K +表的数据库。我需要检查一个表中的行是否被任何其他表使用(所有关系都已启动并使用ID运行)。唯一的想法我是SQL服务器测试参照完整性

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

如何检查是否在表格中的某一行中任何其他表正在使用的数据库或(甚至更好)SQL Server如何检查参照完整性(以及如何使用如果可能的话,也采用相同的方法)?

回答

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有帮助。

+0

它不是寻找真正的东西,它显示的对象。我需要检查表A中的特定行是否在任何其他表中引用(我有该行的标识/ PK)。在我的示例中,我需要检查ID = 47的行是否被引用 – 2014-10-29 15:44:58

+0

要检查该问题,可以使用另一个表“从LC147_PlanProracuna t1在t1.ID = t2.ID上加入other_table t2”执行“INNER JOIN” ' – Rahul 2014-10-29 17:47:24

+0

老兄,在数据库中有2k表,这是一个很长的查询,可以/将在几秒内计算出来。其次,在DB中添加新的表,该查询将被废弃,并且对于存储过程来说不可行。如果没有“干净而简单”的方式来做到这一点,生病做一个动态查询,这将与系统表做到这一点,然后执行具有特定行/行ID的代码 – 2014-10-30 12:52:53