2017-05-03 7 views
9

तालिका ए के बीच विदेशी कुंजी बाधा कॉलम जानकारी खोजें तालिका ए में तालिका बी (आईडी) के लिए एक विदेशी कुंजी बाधा (प्रकार) है। हालांकि, प्रकार शून्य नहीं है और आईडी शून्य है।टेबल्स

मैं info_schema का उपयोग करके एक क्वेरी बनाने की कोशिश कर रहा हूं जो विदेशी कुंजी बाधाओं को देखेगा और कॉलम प्रकारों और शून्य कॉलम से मेल खाता है ताकि वे यह सिंक कर सकें कि वे सिंक करते हैं, हालांकि मुझे तर्क के साथ समस्याएं आ रही हैं।

select kcu.table_name, kcu.column_name, c.column_type, c.is_nullable,kcu.referenced_table_name, kcu.referenced_column_name,c.column_type, c.is_nullable 
from key_column_usage kcu 
inner join columns c on c.table_schema=kcu.table_schema and c.column_name=kcu.column_name and c.table_name=kcu.table_name 
where kcu.referenced_table_name='Table_B' and kcu.table_name='Table_A'; 

मुझे पता है कि यह वाक्यविन्यास गलत है - यह सब कुछ मैं अब तक एक साथ रखने में सक्षम हूं। मैं इसे डेटाबेस में प्रत्येक तालिका के लिए निष्पादित करने में सक्षम होना चाहता हूं और इसे table_name, फिर column_name द्वारा आदेश दिया गया है। यह कॉलम को बहिष्कृत कर सकता है जहां कॉलम_ टाइप और is_nullable फ़ील्ड समान हैं।

उत्तर

5

वहाँ एक विदेशी बाधा के एक तरफ एक व्यर्थ स्तम्भ के लिए वैध कारण हो सकता है, लेकिन यह शामिल कॉलम के प्रकार/नल गुण की तुलना करेंगे।

SELECT 
     kcu.constraint_schema 
    , kcu.constraint_name 
    , kcu.referenced_table_name 
    , kcu.referenced_column_name 
    , kcu.table_name 
    , kcu.column_name 
    , refcol.column_type referenced_column_type 
    , childcol.column_type 
    , refcol.is_nullable referenced_is_nullable 
    , childcol.is_nullable 

FROM information_schema.key_column_usage kcu 
INNER JOIN information_schema.columns refcol 
     ON refcol.table_schema = kcu.referenced_table_schema 
     AND refcol.table_name = kcu.referenced_table_name 
     AND refcol.column_name = kcu.referenced_column_name 
INNER JOIN information_schema.columns childcol 
     ON childcol.table_schema = kcu.table_schema 
     AND childcol.table_name = kcu.table_name 
     AND childcol.column_name = kcu.column_name 

WHERE (
     refcol.is_nullable <> childcol.is_nullable 
     OR 
     refcol.column_type <> childcol.column_type 
    ) 
AND kcu.TABLE_SCHEMA = 'rextester' #change this value to suit 
ORDER BY 
     kcu.table_name 
    , kcu.column_name 
; 

See a working example (click the run button)

+0

'refcol.column_type <> childcol.column_type' - मुझे लगता है कि यह संभव नहीं होना चाहिए। –

+0

@ पॉल स्पिगल ने बेमिसाल डेटा प्रकारों के बारे में शर्त का अनुरोध किया था। –

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