2009-01-14 11 views
5

Query a Table's Foreign Key relationships से मिलती-जुलती है, लेकिन SQL Server 2000एसक्यूएल सर्वर 2000 - क्वेरी एक टेबल के विदेश कुंजी रिश्तों

किसी तालिका के 'foo' के लिए के लिए, मैं एक प्रश्न की जरूरत है विदेशी है कि टेबल का एक सेट उत्पन्न करने के लिए कुंजी जो फू को इंगित करती है।

उत्तर

7
SELECT o2.name 
FROM sysobjects o 
INNER JOIN sysforeignkeys fk on o.id = fk.rkeyid 
INNER JOIN sysobjects o2 on fk.fkeyid = o2.id 
WHERE o.name = 'foo' 
+0

आप स्तंभ नाम भी (धन्यवाद एलेक्स) चाहते हैं: चयन o2.name, COL_NAME (rkeyid, rkey) referenced_column_name sysobjects से ओ अंदरूनी शामिल हों sysforeignkeys o.id = fk.rkeyid पर FK रूप अंदरूनी शामिल हों sysobjects o2 fk.fkeyid = o2.id पर कहां o.name = 'ATE_Question' –

1

प्रारंभ यहाँ

SELECT cons.TABLE_NAME 
    , cons.CONSTRAINT_NAME PK_NAME 
    , cols.COLUMN_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS cons 
LEFT join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cols 
ON cons.CONSTRAINT_NAME = cols.CONSTRAINT_NAME 
WHERE cons.CONSTRAINT_TYPE = 'foreign KEY' 
ORDER BY cons.TABLE_NAME 
    , cons.CONSTRAINT_NAME 
    , cols.COLUMN_NAME 

[संपादित करें] स्वरूपण सभी में गड़बड़ है

[EDIT2] अब

+0

पास ... एक प्रश्न है कि काम करता है के लिए क्रेडिट। किसी दिए गए तालिका 'foo' के लिए, मुझे उन तालिकाओं का एक सेट जेनरेट करने के लिए एक क्वेरी चाहिए जिसमें विदेशी कुंजी है जो foo को इंगित करती है। –

3

कोई इस T-SQL का प्रयास करें:

select col_name(fkeyid, fkey) as column_name, object_name(rkeyid) as referenced_table_name, col_name(rkeyid, rkey) as referenced_column_name from sysforeignkeys where object_name(fkeyid) = 'tableNameHere' order by constid 

मैंने किसी विशेष तालिका पर निर्भर अन्य सभी टेबल देने के लिए क्वेरी को थोड़ा सा लिखा:

select object_name(fkeyid), 
col_name(fkeyid, fkey) as column_name, 
col_name(rkeyid, rkey) as referenced_column_name 
from sysforeignkeys 
where object_name(rkeyid) = 'tableNameHere' 
order by constid 
+0

सभी सम्मानित सम्मान के साथ, किसने मुझे यहां वोट दिया? अपने आप से बाहर – alex

2

माता-पिता और बच्चों

/* this will find out all of the foreign key references for a table*/ 

DECLARE @tableName varchar(128) 
SET @tableName = 'tCounter' 

SELECT 
    pt.[name] AS 'parentTable', 
    ct.[name] AS 'childTable', 
    fk.[name] AS 'fkName', 
* 
FROM sys.foreign_keys fk   
    INNER JOIN sys.tables pt    
     ON pt.object_ID = fk.parent_object_id   
    INNER JOIN sys.tables ct    
     ON ct.object_ID = fk.referenced_object_id 
WHERE pt.name = @tableName  
    OR ct.name = @tableName 
ORDER BY pt.name, ct.name 
+0

यह वही है जो कुछ और उसके लिए पूछा गया था। – StingyJack

+0

मैंने इसे चलाया और शून्य आउटपुट था। इसे चिह्नित करने से पहले इस बारे में एक टिप्पणी होनी चाहिए थी। – TamusJRoyce

+1

यदि आप इसे चलाते हैं तो कोई आउटपुट नहीं होता है तो कोई विदेशी कुंजी परिभाषित नहीं होती है। –

संबंधित मुद्दे