2010-07-05 21 views
13

से अद्वितीय कुंजी के स्तंभ नाम पाने के लिए मुझे कैसे पता चलेगा कैसे निम्नलिखित एसक्यूएल बयान का उपयोग कर एक तालिका में कॉलम पाने के लिए:एसक्यूएल - टेबल

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE (TABLE_NAME = 'MYTABLENAME') 

लेकिन मैं कैसे वापस जाने क्या अद्वितीय कुंजी के स्तंभ का नाम ? मन एक मेज कई अद्वितीय की कमी, प्रत्येक एकाधिक स्तंभों से युक्त हो सकता है में

SELECT * 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC 
WHERE TC.TABLE_NAME = 'MYTABLENAME' 
AND TC.CONSTRAINT_TYPE = 'UNIQUE' 
+0

इस डेटाबेस आपके द्वारा उपयोग की बहुत निर्भर है के लिए काम नहीं कर रहा था

SELECT col.name FROM sys.objects AS obj INNER JOIN sys.columns AS col ON col.object_id = obj.object_id INNER JOIN sys.index_columns AS idx_cols ON idx_cols.column_id = col.column_id AND idx_cols.object_id = col.object_id INNER JOIN sys.indexes AS idx ON idx_cols.index_id = idx.index_id AND idx.object_id = col.object_id WHERE (obj.name = 'pluginUsers') AND (idx.is_unique = 1) 

और भी

SELECT CCU.CONSTRAINT_NAME, CCU.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS CCU ON TC.CONSTRAINT_CATALOG = CCU.CONSTRAINT_CATALOG AND TC.CONSTRAINT_SCHEMA = CCU.CONSTRAINT_SCHEMA AND TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME WHERE (TC.TABLE_NAME = 'pluginUsers') 

आप सभी को धन्यवाद। आप किस डेटाबेस का उपयोग करते हैं? –

+0

@Xavier - जब तक यह एक एम्बेडेड डीबी नहीं है, अब तक एएनएसआई 'info_schema' – Donnie

+1

का समर्थन करता है यह तालिका पर एक से अधिक अनूठी कुंजी रखने के लिए भी पूरी तरह से स्वीकार्य है ... मुझे लगता है कि आप प्राथमिक कुंजी का मतलब है, हालांकि एकाधिक कॉलम का एक संगत हो सकता है –

उत्तर

7

कुछ इस तरह काम कर सकते हैं (untested)। आपको सही चुनने के लिए कुछ अतिरिक्त तर्क लागू करने की आवश्यकता होगी।

अद्यतन - अन्य टिप्पणी के आधार पर ...

ऊपर क्वेरी सभी UNIQUE कुंजी बाधाओं मिल जाएगा। हालांकि, UNIQUE कुंजी बाधा के बाहर बनाए गए PRIMARY KEY बाधाओं, या UNIQUE अनुक्रमणिका नहीं मिलेगी।

प्राथमिक कुंजी खोजने के लिए, के साथ अंतिम पंक्ति की जगह:

and TC.CONSTRAINT_TYPE = 'PRIMARY KEY' 
+0

यह अनुरोध के अनुसार कॉलम नाम पुनर्प्राप्त नहीं करता है। –

+0

क्षमा करें, मेरी देव मशीन पर नहीं। लेकिन यह कहां से शुरू करना है। :) – ongle

11
select CCU.CONSTRAINT_NAME, CCU.COLUMN_NAME 
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS as TC 
inner join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE as CCU 
    on TC.CONSTRAINT_CATALOG = CCU.CONSTRAINT_CATALOG 
    and TC.CONSTRAINT_SCHEMA = CCU.CONSTRAINT_SCHEMA 
    and TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME 
where TC.CONSTRAINT_CATALOG = 'MyCatalogName' 
and TC.CONSTRAINT_SCHEMA = 'MySchemaName' 
and TC.TABLE_NAME = 'MyTableName' 
and TC.CONSTRAINT_TYPE = 'UNIQUE' 

भालू:

0

TABLE_NAME का वर्णन नहीं होगा; चाल चलो?

+0

डेटाबेस पर निर्भर करता है। – Donnie

3

कुछ इस तरह:

Select col.name From 
sys.objects obj 
Join sys.columns col on col.[object_id] = obj.[object_id] 
Join sys.index_columns idx_cols on idx_cols.[column_id] = col.[column_id] and idx_cols.[object_id] = col.[object_id] 
Join sys.indexes idx on idx_cols.[index_id] = idx.[index_id] and idx.[object_id] = col.[object_id] 
where obj.name = 'MYTABLENAME' 
and idx.is_unique = 1 
1

दो कि मैं काम करने के लिए मिला निम्नलिखित हैं, 2 एक मूल पोस्टर से लेकिन TC.CONSTRAINT_TYPE बिना किया गया था = 'अद्वितीय'। यही कारण है कि शर्त है कि आपकी पोस्ट

-1
SELECT * 
FROM mbiis.INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
WHERE TABLE_NAME='TABLE_NAME' AND CONSTRAINT_TYPE='UNIQUE'; 
संबंधित मुद्दे