2014-10-29 64 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