दिलचस्प पोस्ट
MySQL: सॉर्ट करें GROUP_CONCAT मान एएसपी.NET कोर में टोकन आधारित प्रमाणीकरण (ताज़ा) संदर्भ से मैं एक आदिम डेटा प्रकार कैसे प्राप्त करूं? MySQL फ़ंक्शन के अंदर एक त्रुटि कैसे बढ़ाएं मोज़िला, क्रोम और IE के लिए विशिष्ट सीएसएस कैसे लिखें संदर्भ जेनेरिक के साथ अस्पष्ट है क्या मैं कैनवास तत्व से छवि प्राप्त कर सकता हूं और इसका इस्तेमाल img src टैग में कर सकता हूं? TypeScript किसी भी बनाम ऑब्जेक्ट छवि प्रसंस्करण: 'कोका-कोला कैन' मान्यता के लिए एल्गोरिथ्म सुधार एंड्रॉइड लॉक स्क्रीन का स्रोत "मानक" समयक्षेत्र संक्षेप क्या हैं? जीआईटी रिबेस और जीआईटी धक्का: गैर-फास्ट फॉरवर्ड, क्यों उपयोग करें? मैं PHP में एक क्रॉस डेटाबेस क्वेरी का निर्माण कैसे करूं? ओवरराइड jquery मान्य प्लगइन ईमेल पता सत्यापन तिथि से महीने के आखिरी दिन कैसे खोजें?

SQL सर्वर में विदेशी कुंजी निर्भरता कैसे प्राप्त करें?

मैं किसी विशेष कॉलम पर सभी विदेशी कुंजी निर्भरता कैसे पा सकता हूं?

अलग-अलग विकल्प क्या हैं (ग्राफिक में SSMS, क्वेरी / SQL सर्वर में दृश्य, तृतीय पक्ष डेटाबेस उपकरण, कोड। NET)?

वेब के समाधान से एकत्रित समाधान "SQL सर्वर में विदेशी कुंजी निर्भरता कैसे प्राप्त करें?"

निम्नलिखित प्रश्न आपको आरंभ करने में मदद करेगा। यह मौजूदा डेटाबेस के भीतर सभी विदेशी कुंजी रिश्ते को सूचीबद्ध करता है

SELECT FK_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 

आप डेटाबेस आरेख के भीतर SQL सर्वर प्रबंधन स्टूडियो के भीतर संबंधों को रेखांकित भी देख सकते हैं।

कोशिश करें: sp_help [table_name]

आपको सभी विदेशी कुंजियों सहित तालिका के बारे में सारी जानकारी मिल जाएगी

यदि आप केवल विदेशी कुंजी निर्भरता ढूंढने वाली तालिका या स्तंभ को हटाने या पुन: नामित करने की योजना बनाते हैं तो वह पर्याप्त नहीं हो सकता है

विदेशी कुंजी के साथ कनेक्ट नहीं संदर्भित तालिकाओं – आपको उन तालिका को संदर्भित करने की ज़रूरत होगी जो कि विदेशी कुंजी के साथ नहीं जुड़ी हो सकती है (मैंने कई डिटेबस को खराब डिज़ाइन के साथ देखा है जो कि विदेशी कुंजी परिभाषित नहीं थीं, लेकिन उनके पास संबंधित डेटा था )। समाधान सभी तालिकाओं में कॉलम नाम खोजना और समान कॉलम देखने के लिए हो सकता है।

अन्य डेटाबेस ऑब्जेक्ट्स – यह संभवत: थोड़ा सा विषय है, लेकिन यदि आप सभी संदर्भों की तलाश कर रहे थे, तो निर्भर ऑब्जेक्ट्स की जांच करना भी महत्वपूर्ण है।

जीयूआई उपकरण – विदेशी कुंजी के साथ जुड़े तालिकाओं सहित सभी निर्भर वस्तुओं को पहचानने के लिए एसएसएमएस "संबंधित वस्तुओं का पता लगाएं" विकल्प या उपकरण जैसे एपेक्स एसक्यूएल खोज (नि: शुल्क उपकरण, एसएसएमएस में एकीकृत) का उपयोग करें

क्योंकि आपका प्रश्न एक मेज के प्रति तैयार है, आप इसका उपयोग कर सकते हैं:

 EXEC sp_fkeys 'TableName' 

मैंने इसे यहां पर पाया:

https://stackoverflow.com/a/12956348/652519

मुझे वह जानकारी मिली जो मुझे बहुत जल्दी जरूरत थी। यह विदेशी कुंजी की तालिका, स्तंभ और नाम सूचीबद्ध करता है।

संपादित करें

यहां दस्तावेज़ के लिए एक लिंक है जो विभिन्न पैरामीटर का विवरण देता है जिसका उपयोग किया जा सकता है: https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-fkeys-transact-sql

मुझे लगता है कि यह स्क्रिप्ट कम महंगा है:

 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 

जो वास्तव में उपयोग करना चाहते हैं वह है जिसे रेड गेट सॉफ्टवेयर द्वारा एसक्यूएल डिपेंडेंसी ट्रैकर कहा जाता है। आप किसी भी डेटाबेस ऑब्जेक्ट (जैसे) टेबल, संग्रहीत कार्यविधियों, आदि में रख सकते हैं और यह स्वचालित रूप से आपके चयनित आइटम (वस्तुओं) पर भरोसा रखने वाली अन्य सभी वस्तुओं के बीच संबंध रेखा खींच लेगा।

आपकी स्कीमा में निर्भरता का एक बहुत अच्छा ग्राफिकल प्रतिनिधित्व देता है

जॉन सैन्सॉम के लिए बहुत बहुत धन्यवाद, उनकी पूछताछ बहुत बढ़िया है!

इसके अलावा: आपको अपनी क्वेरी के अंत में "AND PT.ORDINAL_POSITION = CU.ORDINAL_POSITION" जोड़ना चाहिए।

यदि आपके पास प्राथमिक कुंजी में कई फ़ील्ड हैं, तो यह कथन इसी फ़ील्ड्स को एक-दूसरे से मेल करेगा (मेरे पास ऐसा मामला था, आपकी क्वेरी ने सभी संयोजन बनाए हैं, इसलिए प्राथमिक कुंजी में 2 फ़ील्ड के लिए, मेरे पास इसी विदेशी कुंजी के 4 परिणाम थे) ।

(क्षमा करें मैं जॉन के जवाब पर टिप्पणी नहीं कर सकता क्योंकि मेरे पास पर्याप्त प्रतिष्ठा अंक नहीं हैं)।

यह क्वेरी किसी तालिका में विदेशी कुंजी के बारे में विवरण लौटाएगी, यह एकाधिक कॉलम कुंजियों का समर्थन करता है

  SELECT * FROM ( SELECT T1.constraint_name ConstraintName, T2.COLUMN_NAME ColumnName, T3.TABLE_NAME RefTableName, T3.COLUMN_NAME RefColumnName, T1.MATCH_OPTION MatchOption, T1.UPDATE_RULE UpdateRule, T1.DELETE_RULE DeleteRule FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS T1 INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE T2 ON T1.CONSTRAINT_NAME = T2.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE T3 ON T1.UNIQUE_CONSTRAINT_NAME = T3.CONSTRAINT_NAME AND T2.ORDINAL_POSITION = T3.ORDINAL_POSITION) A WHERE A.ConstraintName = 'table_name' 

लंबे समय तक खोज के बाद मुझे एक कार्यशील समाधान मिला। मेरा डेटाबेस sys.foreign_key_columns का उपयोग नहीं करता है और information_schema.key_column_usage में केवल प्राथमिक कुंजी होते हैं

मैं SQL सर्वर 2015 का उपयोग करता हूँ

समाधान 1 (शायद ही कभी प्रयोग किया जाता है)

यदि अन्य समाधान काम नहीं करते हैं, तो यह ठीक काम करेगा:

  WITH CTE AS ( SELECT TAB.schema_id, TAB.name, COL.name AS COLNAME, COl.is_identity FROM sys.tables TAB INNER JOIN sys.columns COL ON TAB.object_id = COL.object_id ) SELECT DB_NAME() AS [Database], SCHEMA_NAME(Child.schema_id) AS 'Schema', Child.name AS 'ChildTable', Child.COLNAME AS 'ChildColumn', Parent.name AS 'ParentTable', Parent.COLNAME AS 'ParentColumn' FROM cte Child INNER JOIN CTE Parent ON Child.COLNAME=Parent.COLNAME AND Child.name<>Parent.name AND Child.is_identity+1=Parent.is_identity 

समाधान 2 (सामान्यतः उपयोग किया जाता है)

ज्यादातर मामलों में यह ठीक काम करेगा:

  SELECT DB_NAME() AS [Database], SCHEMA_NAME(fk.schema_id) AS 'Schema', fk.name 'Name', tp.name 'ParentTable', cp.name 'ParentColumn', cp.column_id, tr.name 'ChildTable', cr.name 'ChildColumn', cr.column_id FROM sys.foreign_keys fk INNER JOIN sys.tables tp ON fk.parent_object_id = tp.object_id INNER JOIN sys.tables tr ON fk.referenced_object_id = tr.object_id INNER JOIN sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id INNER JOIN sys.columns cp ON fkc.parent_column_id = cp.column_id AND fkc.parent_object_id = cp.object_id INNER JOIN sys.columns cr ON fkc.referenced_column_id = cr.column_id AND fkc.referenced_object_id = cr.object_id WHERE -- CONCAT(SCHEMA_NAME(fk.schema_id), '.', tp.name, '.', cp.name) LIKE '%my_table_name%' OR -- CONCAT(SCHEMA_NAME(fk.schema_id), '.', tr.name, '.', cr.name) LIKE '%my_table_name%' ORDER BY tp.name, cp.column_id 

@ जॉन सेंसोम के जवाब के लिए सिर्फ एक नोट,

यदि विदेशी कुंजी निर्भरता की मांग की जाती है, तो मुझे लगता है कि पीटी जहां पर होना चाहिए:

 i1.CONSTRAINT_TYPE = 'FOREIGN KEY' -- instead of 'PRIMARY KEY' 

और इसकी चालू स्थिति:

 ON PT.TABLE_NAME = FK.TABLE_NAME – instead of PK.TABLE_NAME 

आमतौर पर विदेशी तालिका की प्राथमिक कुंजी का उपयोग किया जाता है, मुझे लगता है कि इस मुद्दे को पहले नहीं देखा गया है।

USE information_schema;

 SELECT COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM KEY_COLUMN_USAGE WHERE (table_name = *tablename*) AND NOT (REFERENCED_TABLE_NAME IS NULL)