मैं एक टेबल पर विदेशी कुंजी का नाम निर्धारित करने की कोशिश कर रहा हूं लेकिन मुझे गलत मान मिल रहे हैं। अगर मैं इस उदाहरण का उपयोग करता हूं SQL

CREATE TABLE Address 
(
    id INT NOT NULL PRIMARY KEY,
    street VARCHAR NOT NULL
);

CREATE TABLE Person 
(
    id INT NOT NULL PRIMARY KEY,
    orgId INT NOT NULL REFERENCES dbo.Organization (id)
);

SELECT tbl.name TableName, col.name ColumnName, fk.name ForeignKey
FROM sys.tables tbl
JOIN sys.columns col ON tbl.object_id = col.object_id
LEFT OUTER JOIN sys.foreign_keys fk ON tbl.object_id = fk.parent_object_id
WHERE tbl.name = 'Person'

यह मुझे बता रहा है कि ForeignKey नाम id और Person टेबल के orgId कॉलम दोनों के लिए समान है। स्पष्ट रूप से मुझे एक अतिरिक्त जुड़ने की स्थिति याद आ रही है, लेकिन मैं अपने जीवन के लिए यह नहीं समझ सकता कि यह क्या है।

0
Gargoyle 12 नवम्बर 2020, 01:23

1 उत्तर

सबसे बढ़िया उत्तर

आपकी क्वेरी में कुछ हिस्सा गुम है, यह देखने के लिए कि कौन से कॉलम में FK है, आप sys.foreign_key_columns व्यू का उपयोग कर सकते हैं। यहाँ आपको क्या चाहिए:

SELECT
    tbl.name   TableName
    , col.name ColumnName
    , fk2.name  ForeignKey
FROM
    sys.tables                              tbl
    JOIN sys.columns                        col
        ON tbl.object_id = col.object_id
    LEFT OUTER JOIN sys.foreign_key_columns AS fk
        ON col.object_id = fk.parent_object_id
           AND fk.parent_column_id = col.column_id
    LEFT OUTER JOIN sys.foreign_keys        AS fk2
        ON fk2.object_id = fk.constraint_object_id
WHERE
    tbl.name = 'Person';
0
eshirvana 11 नवम्बर 2020, 22:42