2011-05-24 17 views
7

क्या यह सबसे अच्छा तरीका है - डेटाबेस में सभी प्राथमिक कुंजीों की एक सूची प्राप्त करें - या क्या कुछ बेहतर है?डेटाबेस में सभी प्राथमिक कुंजीों की एक सूची प्राप्त करें

SELECT 
KCU.TABLE_NAME AS Table_Name, 
KCU.CONSTRAINT_NAME AS Constraint_Name, 
KCU.COLUMN_NAME AS COLUMN_NAME 
FROM 
INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC 
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU 
ON KCU.CONSTRAINT_SCHEMA = TC.CONSTRAINT_SCHEMA 
AND KCU.CONSTRAINT_NAME = TC.CONSTRAINT_NAME 
AND KCU.TABLE_SCHEMA = TC.TABLE_SCHEMA 
AND KCU.TABLE_NAME = TC.TABLE_NAME 
WHERE 
TC.CONSTRAINT_TYPE = 'PRIMARY KEY' 
ORDER BY 
KCU.TABLE_SCHEMA, KCU.TABLE_NAME, KCU.CONSTRAINT_NAME 
+2

कृपया एक बेहतर शीर्षक चुनें। "सर्वश्रेष्ठ" से आपका क्या मतलब है? –

+0

आप शायद @@ पहचान का भी उपयोग कर सकते हैं, लेकिन मुझे पता नहीं है कि यह आपके पास क्या है? – Ruben

+0

@cularis - आरई: आपका प्रस्तावित टैग संपादित करें 'INFORMATION_SCHEMA' निश्चित रूप से' MySQL' को इंगित नहीं करता है। ये पोर्टेबल विचारों के लिए हैं। –

उत्तर

4

link

EXEC sp_pkeys '<tablename>' 
EXEC sp_helpconstraint '<tablename>' 

sp_pkeys पर नज़र प्रत्येक स्तंभ के लिए प्राथमिक कुंजी में भाग लेता है के लिए एक पंक्ति वापस आ जाएगी। कॉलम आपको सबसे अधिक रुचि रखते हैं COLUMN_NAME और PK_NAME में हैं।

sp_helpconstraint के लिए सभी बाधाओं सूची जाएगा, विदेशी कुंजी तालिका को देख कि भी शामिल है। पहले रिकॉर्डसेट में, केवल ऑब्जेक्ट नेम नामक कॉलम होगा (बेकार की तरह, क्योंकि यह है जिसे आपने पास किया है)। दूसरे परिणामसेट में, निम्नलिखित कॉलम होंगे: constraint_type, constraint_name, और constraint_keys।

+5

क्यों इस सवाल का जवाब है, यह केवल करता है यह एक तालिका के लिए डेटाबेस नहीं है, जो –

+1

प्रश्न का मूल बिंदु था, यहां संदर्भित लिंक अमान्य – mjenkins

29
USE databasename; 

GO 

SELECT i.name AS IndexName, OBJECT_NAME(ic.OBJECT_ID) AS TableName, 
     COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName 
FROM sys.indexes AS i 
INNER JOIN sys.index_columns AS ic 
ON i.OBJECT_ID = ic.OBJECT_ID 
AND i.index_id = ic.index_id 
WHERE i.is_primary_key = 1 

इस क्वेरी डेटाबेस से सभी प्राथमिक कुंजी की कमी निकालने होगा ... यू केवल आपके से यह कर रहे हैं, तो इस क्वेरी निष्पादित और पहली पंक्ति

0

में डेटाबेस का नाम टाइप करने की जरूरत है जावा आप डेटाबेस पैराडेटा ऑब्जेक्ट में getPrimaryKeys विधि का भी उपयोग कर सकते हैं। शायद अन्य भाषाओं में ऐसा करने के समान तरीके हैं।

6

निम्नलिखित वाक्यविन्यास आपको उपयोग में डेटाबेस में सभी बाधाएं देता है।

select * from sys.key_constraints; 
+3

@Ashraf से प्रतिक्रिया में जोड़ने के लिए, आप sys.key_constraints से 'OBJECT_NAME (parent_object_id) चुनें, * टाइप करें = 'पीके'। इससे आपको प्राथमिक कुंजी वाले टेबल के लिए तालिका का नाम और उनके प्राथमिक कुंजी नाम मिलेंगे। – nam

1

तुम भी डेटा प्रकार जानकारी चाहते हैं:

SELECT 
    so.name 'Table Name', 
    c.name 'Column Name', 
    t.Name 'Data type', 
    c.max_length 'Max Length', 
    c.precision , 
    c.scale , 
    c.is_nullable, 
    ISNULL(i.is_primary_key, 0) 'Primary Key' 
FROM  
    sys.columns c 
INNER JOIN 
    sys.types t ON c.user_type_id = t.user_type_id 
LEFT OUTER JOIN 
    sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id 
LEFT OUTER JOIN 
    sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id 
INNER JOIN 
    sysobjects so ON c.object_id = so.id 
WHERE 
    i.is_primary_key = 1 and 
    so.xtype = 'U' 
Order By 'Table Name', 'Column Name' 
संबंधित मुद्दे