2009-05-10 18 views
5

डर्बी सर्वर में, आप प्रत्येक तालिका के लिए बाधा नाम पुनर्प्राप्त करने के लिए एक चुनिंदा कथन बनाने के लिए स्कीमा की सिस्टम तालिकाओं में जानकारी का उपयोग कैसे कर सकते हैं?डर्बी - बाधाएं

उत्तर

6

प्रासंगिक मैनुअल Derby Reference Manual है। कई संस्करण उपलब्ध हैं: 10.13 अप्रैल 2017 में वर्तमान था, लेकिन यह मई में 10.3 था 2009

मूल जवाब

SELECT c.constraintname, t.tablename 
    FROM sysconstraints c, systables t 
    WHERE c.tableid = t.tableid; 

के बाद से डर्बी के लिए पर्याप्त रूप से हाल के संस्करण की आवश्यकता है कि प्रणाली सूची तालिकाओं (10.13 एक comment में kiwicomb123 द्वारा उद्धृत किया गया है) sys. लगाया जाता है, तो आप स्पष्ट उपयोग करने के लिए क्वेरी को संशोधित कर सकते भी अंकन शामिल हों, और उपयोग:

SELECT c.constraintname, t.tablename 
    FROM sys.sysconstraints c 
    JOIN sys.systables t 
    ON c.tableid = t.tableid; 

आप अतिरिक्त कॉलम जोड़ सकते हैं - उदाहरण के लिए, c.type बाधा प्रकार प्राप्त करने के लिए।

+0

क्या बाधा प्रकार जानने का कोई तरीका है? –

+1

मुझे लगता है कि मैं आपके लिए आरटीएफएम कर सकता हूं। Sysconstraints.Type एक चार्ज (1) फ़ील्ड है जिसमें मूल्य 'यू' (अनोखा), 'पी' (प्राथमिक), 'एफ' (विदेशी कुंजी) या 'सी' (चेक) है। हालांकि, जब दस्तावेज को पॉइंटर्स दिए जाते हैं, तो आमतौर पर दस्तावेज़ीकरण को पढ़ने और पढ़ने के लिए समझदारी होती है। –

+0

यह क्वेरी डर्बी 10.13 में काम नहीं करती है, आपको टेबल नाम sysconstraints और sysconstraints को "sys" के साथ उपसर्ग करना होगा। उदाहरण के लिए: sysconstraints के बजाय sys.sysconstraints का प्रयोग करें। – kiwicomb123

2
SELECT sc.schemaname, co.constraintname, t.tablename, cg.descriptor, t2.tablename, cg2.descriptor, f.deleterule, f.updaterule 
FROM sys.sysconstraints co 
JOIN sys.sysschemas sc ON co.schemaid = sc.schemaid 
JOIN sys.systables t ON co.tableid = t.tableid 
JOIN sys.sysforeignkeys f ON co.constraintid = f.constraintid 
JOIN sys.sysconglomerates cg ON f.conglomerateid = cg.conglomerateid 
JOIN sys.sysconstraints co2 ON f.keyconstraintid = co2.constraintid 
JOIN sys.systables t2 ON co2.tableid = t2.tableid 
JOIN sys.syskeys k ON co2.constraintid = k.constraintid 
JOIN sys.sysconglomerates cg2 ON k.conglomerateid = cg2.conglomerateid 
WHERE co.type = 'F' 
    and sc.schemaname = current schema  

दो वर्णनकर्ता प्रविष्टियों

BTREE की तरह, प्रत्येक तालिका के लिए स्तंभ संख्या की एक सूची शामिल (2,1)

जहां नंबरों के लिए syscolumns तालिका में कॉलम संख्या के अनुरूप संबंधित तालिका

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

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