2011-10-21 24 views
16

Yabancı anahtarların belirli bir tablo sütununa yönlendirilmesini sağlayacak bir sorgu var mı? "Tablo B: TableAId: Ben "TableAId Tablo C" iade "TableA.Id yönelik * Dış Keys Seç" çizgisinde bir sorgu ihtiyacımBelirli bir tabloya Yabancı anahtarlar bulmak için SQL Script?

__________ 
|Table A | 
---------- 
|Id  | 
---------- 

___________ 
|Table B | 
----------- 
|Id  | 
|TableAId | (Foreign Key to TableA.Id) 
----------- 

___________ 
|Table C | 
----------- 
|Id  | 
|TableAId | (Foreign Key to TableA.Id) 
----------- 

: Örneğin, ben bu üç tablo vardı ki ". Bazı INFORMATION_SCHEMA sistem görüntülerini gözden geçiriyorum ve Tablo A'ya veya Tablo B'ye hangi yabancı anahtarların ait olduğunu kolayca görebiliyorum gibi görünüyor, ama nerede olduğunu söyleyemiyorum. "Tablo C'nin yabancı bir anahtarı var. Tablo A "özellikle. Sorgunun ayrıntılarını anlayabiliyorum, sadece aradığım görünümleri bulamıyorum (veya üzerlerinde gözümün üstündeyim). Herhangi bir yardım takdir edilecektir.

cevap

36

Courtesy of Pinal Dave:

SELECT 
    f.name AS ForeignKey, 
    OBJECT_NAME(f.parent_object_id) AS TableName, 
    COL_NAME(fc.parent_object_id, 
    fc.parent_column_id) AS ColumnName, 
    OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName, 
    COL_NAME(fc.referenced_object_id, 
    fc.referenced_column_id) AS ReferenceColumnName 
FROM 
    sys.foreign_keys AS f 
    INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id 
+0

Teşekkürler! Bu yapacak. – Ocelot20

+0

Dostum - bu harika! Bir "katılma jeneratörü" arıyordum ama bu bunun için elle sql. Bunun için bir çevrimiçi araç bulamadık (SQL Server ile) - belki kendi başıma yazacağım! – SlimsGhost

0

Eklendi dinamik damla ve Dbo şeması üzerinde oluşturun.

DECLARE @l varchar(1) = char(13); 
DECLARE @referenced_object_id varchar(MAX) = 'Replace_With_PK_Table_Name'; 

SELECT 
    fk.name AS ForeignKey, 
    OBJECT_NAME(fk.parent_object_id) AS TableName, 
    COL_NAME(fkc.parent_object_id, 
    fkc.parent_column_id) AS ColumnName, 
    OBJECT_NAME (fk.referenced_object_id) AS ReferenceTableName, 
    COL_NAME(fkc.referenced_object_id, 
    fkc.referenced_column_id) AS ReferenceColumnName, 
    'ALTER TABLE [dbo].['+OBJECT_NAME(fk.parent_object_id)+'] DROP CONSTRAINT ['+fk.name+'];' DropFK, 
    'ALTER TABLE [dbo].['+OBJECT_NAME(fk.parent_object_id)+'] WITH NOCHECK ADD CONSTRAINT ['+fk.name+'] FOREIGN KEY(['+COL_NAME(fkc.referenced_object_id, 
    fkc.referenced_column_id)+'])'+ @l + 
    ' REFERENCES [dbo].['+OBJECT_NAME(fk.referenced_object_id)+'] (['+COL_NAME(fkc.referenced_object_id, 
    fkc.referenced_column_id)+'])'+ @l + 
    ' ON UPDATE CASCADE'+ @l + 
    ' ON DELETE CASCADE;'+ @l + 
    'ALTER TABLE [dbo].['+OBJECT_NAME(fk.parent_object_id)+'] CHECK CONSTRAINT ['+fk.name+'];' CreateFK 
FROM 
    sys.foreign_keys AS fk 
    INNER JOIN sys.foreign_key_columns AS fkc ON fk.OBJECT_ID = fkc.constraint_object_id 
    WHERE OBJECT_NAME(fk.referenced_object_id)[email protected]_object_id 
İlgili konular