2016-12-16 99 views
1

我有一個Microsoft SQL Server 2012數據庫,其中包含大量表(> 100)。我也有許多多對多的關係表。所有PK/FK關係都在表格中進行,以便我知道哪個表中哪個列屬於哪個父表或子表列。我想詢問是否可以使用通用腳本來檢查所有這些甚至是給定的表格,如果存在孤立的項目並向我展示它們。我的意思是如果有一個不存在不再是父母或兒童項目的任何引用(那裏有喀斯喀特錯誤刪除一些表的配置,我們現在需要檢查數據qualit :()。用於查找Microsoft SQL Server表中的孤立數據的通用腳本

更新

我覺得我不能corretly解釋我的要求。我不希望看到的引用,我想看看是否有任何數據被引用的子項或子項中引用不存在了父項。

+1

我不確定我是否理解這個問題:默認情況下,FK強制執行完整性... – Lucero

+0

[如何列出在SQL Server中引用給定表的所有外鍵?](http:// stackoverflow.com/questions/483193/how-can-i-list-all-foreign-keys-referencing-a-given-table-in-sql-server) –

+0

@Mr。 Bhosale:謝謝,但是這隻顯示了我的限制。我想查看是否有數據引用子項或者子項引用的父項不再存在。 - 風暴42分鐘前 – STORM

回答

0
Try This for get all constraints : 

SELECT OBJECT_NAME(OBJECT_ID) AS NameofConstraint, 
SCHEMA_NAME(schema_id) AS SchemaName, 
OBJECT_NAME(parent_object_id) AS TableName, 
type_desc AS ConstraintType 
FROM sys.objects 
WHERE type_desc LIKE '%CONSTRAINT' 
+0

謝謝你的回答,但這隻顯示了我的約束。我想查看是否有數據引用子項或者子項引用的父項不再存在。 – STORM

0

試試這個。

  SELECT obj.name AS FK_NAME, 
       sch.name AS [schema_name], 
       tab1.name AS [table], 
       col1.name AS [column], 
       tab2.name AS [referenced_table], 
       col2.name AS [referenced_column] 
      FROM sys.foreign_key_columns fkc 
      INNER JOIN sys.objects obj 
       ON obj.object_id = fkc.constraint_object_id 
      INNER JOIN sys.tables tab1 
       ON tab1.object_id = fkc.parent_object_id 
      INNER JOIN sys.schemas sch 
       ON tab1.schema_id = sch.schema_id 
      INNER JOIN sys.columns col1 
       ON col1.column_id = parent_column_id AND col1.object_id = tab1.object_id 
      INNER JOIN sys.tables tab2 
       ON tab2.object_id = fkc.referenced_object_id 
      INNER JOIN sys.columns col2 
       ON col2.column_id = referenced_column_id AND col2.object_id = tab2.object_id 
+0

謝謝你的回答,但這隻顯示了我的約束。我想查看是否有數據引用子項或者子項引用的父項不再存在。 – STORM