2008-10-21 13 views
14

मैं वर्तमान में उपयोग कर रहा हूँ ...मैं कैसे निर्धारित करूं कि कॉलम अपनी तालिका की प्राथमिक कुंजी में है या नहीं? (SQL सर्वर)

select Table_Name, Column_name, data_type, is_Nullable 
from information_Schema.Columns 

... एक DataAccess लेयर जेनरेट करने के उद्देश्य किसी दिए गए डेटाबेस में कॉलम के बारे में जानकारी निर्धारित करने के लिए।

मैं कहां से जानकारी प्राप्त कर सकता हूं कि ये कॉलम प्रतिभागियों को उनकी तालिका की प्राथमिक कुंजी में हैं या नहीं?

उत्तर

30

यहाँ एक तरीका है (स्तंभ नाम आप के लिए खोज कर रहे हैं के साथ 'keycol' डालें):

SELECT K.TABLE_NAME, 
K.COLUMN_NAME, 
K.CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C 
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K 
ON C.TABLE_NAME = K.TABLE_NAME 
AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG 
AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA 
AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME 
WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY' 
AND K.COLUMN_NAME = 'keycol'; 
+0

आपके पास अपने क्लॉज में रुचि का तालिका नाम होना चाहिए। अन्यथा, यदि प्राथमिक कुंजी के साथ कोई अन्य तालिका है जिसमें आपकी रुचि रखने वाली तालिका की प्राथमिक कुंजी के समान कॉलम नाम है, तो आपको वह परिणाम मिल जाएगा। – Markus

6

इसी प्रकार, निम्नलिखित आप सभी तालिकाओं और अपनी चाबी के बारे में जानकारी दे देंगे, के बजाय विशिष्ट कॉलम के बारे में जानकारी। इस तरह, आप सुनिश्चित करते हैं कि आपके पास ब्याज के सभी कॉलम हैं और जानें कि वे क्या भाग लेते हैं। सभी कुंजी (प्राथमिक, विदेशी, अद्वितीय) को देखने के लिए, WHERE क्लॉज पर टिप्पणी करें।

SELECT K.TABLE_NAME, C.CONSTRAINT_TYPE, K.COLUMN_NAME, K.CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C 
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K 
ON C.TABLE_NAME = K.TABLE_NAME 
AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG 
AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA 
AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME 
WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY' 
ORDER BY K.TABLE_NAME, C.CONSTRAINT_TYPE, K.CONSTRAINT_NAME 
3

अपनी जरूरत के लिए, पूर्ण बाहरी INFORMATION_SCHEMA.COLUMNS और INFORMATION_SCHEMA.KEY_COLUMN_USAGE साथ शामिल हो। चयन कथन पर, INFORMATION_SCHEMA.KEY_COLUMN_USAGE से CONSTRAINT_NAME कॉलम जोड़ें जो आपको शून्य या कुंजीनाम देगा।

select C.Table_Name, C.Column_name, data_type, is_Nullable, U.CONSTRAINT_NAME 
from information_Schema.Columns C FULL OUTER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE U ON C.COLUMN_NAME = U.COLUMN_NAME 
WHERE [email protected] 
+0

ग्रेट उत्तर लेकिन आपको यह सुनिश्चित करने के लिए TABLE_NAME को भी जोड़ना चाहिए कि हम सही तालिका से पीके खींच रहे हैं अन्यथा यह सभी तालिका के पीके लोड करेगा जबकि पीके फील्ड नाम पूर्ण बाहरी जुड़ने के दौरान एकाधिक तालिकाओं के लिए समान हैं। –

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

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