2011-10-21 4 views
16

क्या कोई प्रश्न है जो मुझे एक विशिष्ट तालिका कॉलम पर निर्देशित विदेशी कुंजी प्राप्त करेगा? उदाहरण के लिए, कहते हैं कि मैं इन तीन टेबल था:SQL स्क्रिप्ट किसी विशिष्ट तालिका में विदेशी कुंजी ढूंढने के लिए?

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

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

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

मुझे लगता है कि "तालिका सी: TableAId" लौटे "* विदेश TableA.Id के निर्देश पर कुंजी का चयन करें" की तर्ज पर एक प्रश्न की जरूरत तालिका बी, ": TableAId "। मैं कुछ INFORMATION_SCHEMA सिस्टम दृश्यों के माध्यम से ब्राउज़ कर रहा हूं, और ऐसा लगता है कि मैं आसानी से देख सकता हूं कि विदेशी कुंजी तालिका ए, या टेबल बी से अलग-अलग हैं, लेकिन मुझे यह नहीं पता कि यह कहां कहता है "टेबल सी की एक विदेशी कुंजी है टेबल ए "विशेष रूप से। मैं क्वेरी के विनिर्देशों को समझ सकता हूं, मैं उन विचारों को नहीं ढूंढ सकता जो मैं ढूंढ रहा हूं (या मैं उन पर चमक रहा हूं)। किसी भी सहायता की सराहना की जाएगी।

उत्तर

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

धन्यवाद! यह सही रहेगा। – Ocelot20

+0

दोस्त - यह कमाल है! मैं "जनरेटर में शामिल होने" की तलाश में था लेकिन यह इसके लिए मैनुअल एसक्यूएल है। मुझे इसके लिए एक ऑनलाइन उपकरण नहीं मिला (SQL सर्वर के साथ) - शायद मैं अपना खुद लिखूंगा! – SlimsGhost

0

जोड़ा गया गतिशील ड्रॉप और dbo योजना पर पैदा करते हैं।

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 
संबंधित मुद्दे