2011-03-03 26 views
1

我想知道是否有任何系統SP或任何其他方式來查找DB中使用特定查找表的所有表。我知道我可以一桌一桌地找出問題,但我想知道是否有更簡單的方法。DB上的查找表使用情況

感謝

+1

我很困惑。您正在查找使用特定查找*表格*的*表格? –

+0

它們是否都與查找表有外鍵關係?如果不是,你正在尋找具有特定列名的所有表,例如'LookUpTableId'? –

+0

@ Martin--並非所有人都可能擁有查找表的外鍵。我正在查看一些遺留數據庫,我也不確定列的名稱在所有表中是否相同。 – Joe

回答

1
select OBJECT_NAME(parent_object_id), OBJECT_NAME(referenced_object_id) 
    from sys.foreign_keys 
    where parent_object_id = object_id('SchemaName.LookupTableName') 

我不是100%肯定我明白你想往哪個方向走與的關係,所以你可能想這個代替。

select OBJECT_NAME(parent_object_id), OBJECT_NAME(referenced_object_id) 
    from sys.foreign_keys 
    where referenced_object_id = object_id('SchemaName.LookupTableName') 
0

這裏的a blog post由皮納爾戴夫與檢查系統表以確定FK約束一個漫長的查詢...

SELECT 
K_Table = FK.TABLE_NAME, 
FK_Column = CU.COLUMN_NAME, 
PK_Table = PK.TABLE_NAME, 
PK_Column = PT.COLUMN_NAME, 
Constraint_Name = C.CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C 
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME 
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME 
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME 
INNER JOIN (
SELECT i1.TABLE_NAME, i2.COLUMN_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1 
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME 
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' 
) PT ON PT.TABLE_NAME = PK.TABLE_NAME 
---- optional: 
ORDER BY 
1,2,3,4 
WHERE PK.TABLE_NAME='something'WHERE FK.TABLE_NAME='something' 
WHERE PK.TABLE_NAME IN ('one_thing', 'another') 
WHERE FK.TABLE_NAME IN ('one_thing', 'another') 
0

的基本想法是,你想知道哪些表的外鍵進入有問題的桌子。

select tchild.table_name,tparent.table_name 
    from information_schema.table_constraints tchild 
    join information_schema.referential_constraints ref 
    ON tchild.constraint_name = ref.constraint_name 
    JOIN information_schema.table_constraints tparent 
    ON ref.unique_constraint_name = tparent.constraint_name 
where tchild.constraint_type = 'FOREIGN KEY' 
    AND tparent.table_name = '......' 

離開最後where子句獲取所有東西。

相關問題