2012-11-22 14 views
5

आवश्यकता के आधार पर मास्टर टेबल पर कॉलम जोड़ने के लिए, मुझे 2 अलग-अलग डेटाबेस से अलग-अलग तालिकाओं के कॉलम की तुलना करने की आवश्यकता है।2 अलग-अलग डेटाबेस से 2 अलग-अलग टेबल कॉलम की तुलना करें

उदाहरण के लिए:

मास्टर डेटाबेस में मान लें मैं बनाया है एक मेज की तरह:

create table test(id int,name varchar(10)) 

परीक्षण डेटाबेस में मान लें मैं की तरह

create table testings(id int,name varchar(20), sal int) 

एक टेबल बनाया है अब मैं करने के लिए है 2 टेबल कॉलम की तुलना करें

मैं लाल-द्वार उपकरण का उपयोग नहीं करना चाहता हूं।

किसी को भी मेरी मदद कर सकते हैं?

उत्तर

8

आप इसके लिए EXCEPT or INTERSECT सेट ऑपरेटर का उपयोग कर सकते हैं। इसलिए जैसा:

SELECT id, name FROM master.dbo.test 
EXCEPT -- or INTERSECT 
SELECT id, name FROM test.dbo.testings 

यह आपको दे देंगे:

  • छोड़कर: रिटर्न कि नहीं हैं छोड़ दिया क्वेरी से किसी भी अलग-अलग मान भी सही क्वेरी पर पाया।

  • INTERSECT: रिटर्न किसी भी विशिष्ट मानों कि INTERSECT संकार्य के बाएँ और दाएँ पक्ष पर दोनों क्वेरी द्वारा लौटाए जाते हैं।

आपके मामले में, जब से तुम दो अलग डेटाबेस से चयन करना चाहते हैं, तो आप एक पूरी तरह से योग्य तालिका नाम का उपयोग करने के लिए है। उन्हें database.schema.object_name रूप में होना चाहिए।

अद्यतन: आप दो तालिकाओं कॉलम तुलना चाहते हैं नाम EXCEPT साथ उसी तरह के नाम, डेटा ही नहीं, तो आप मेटाडाटा तालिकाओं के साथ काम करने के लिए कॉलम तुलना करने के लिए है '।

उदाहरण के लिए, मान लीजिए आप दो डेटाबेस है:

create table test(id int, name varchar(10), dep varchar(50)); 

और एक अन्य डेटाबेस:

  • anotherdatabase डेटाबेस शामिल

    • Test डेटाबेस तालिका में शामिल है तालिका:

      create table testings(id int,name varchar(20), sal int); 
      

    और तुम दो तालिकाओं 'कॉलम तुलना और तालिकाओं कि अन्य तालिका में मौजूद नहीं है प्राप्त करना चाहते हैं, हमारे उदाहरण में आप sal और dep प्राप्त करने की आवश्यकता। मैं टेबल में शामिल हो गए:

    तो फिर तुम यह कर सकते हैं:

    SELECT ColumnName 
    FROM 
    (
        SELECT c.name "ColumnName" 
        FROM test.sys.tables t 
        INNER JOIN test.sys.all_columns c 
          ON t.object_id = c.object_id 
        INNER JOIN test.sys.types ty 
          ON c.system_type_id = ty.system_type_id 
        WHERE t.name = 'test' 
        EXCEPT 
        SELECT c.name 
        FROM anotherdatabase.sys.tables t 
        INNER JOIN anotherdatabase.sys.all_columns c 
          ON t.object_id = c.object_id 
        INNER JOIN anotherdatabase.sys.types ty 
          ON c.system_type_id = ty.system_type_id 
        WHERE t.name = 'testings' 
    ) t1 
    UNION ALL 
    SELECT ColumnName 
    FROM 
    (
        SELECT c.name ColumnName 
        FROM anotherdatabase.sys.tables t 
        INNER JOIN anotherdatabase.sys.all_columns c 
          ON t.object_id = c.object_id 
        INNER JOIN anotherdatabase.sys.types ty  
          ON c.system_type_id = ty.system_type_id 
        WHERE t.name = 'testings' 
        EXCEPT 
        SELECT c.name 
        FROM test.sys.tables t 
        INNER JOIN test.sys.all_columns c 
          ON t.object_id = c.object_id 
        INNER JOIN test.sys.types ty 
          ON c.system_type_id = ty.system_type_id 
        WHERE t.name = 'test' 
    ) t2; 
    

    यह आपको देना चाहिए: कि

    enter image description here

    नोट

    तालिका के साथ

    :

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

  • +0

    हाय महमूद Gamel, उत्तर देने के लिए धन्यवाद, याद रखें कि हमेशा ऑपरेटरों को पंक्ति के अनुसार कॉलम के अनुसार काम करता है।मेरी आवश्यकता है कि मुझे 2 टेबल कॉलम की तुलना करना होगा यदि किसी तालिका में किसी अन्य से कम कॉलम हैं तो मुझे उस कॉलम नाम की पहचान करनी होगी और मुझे इसे जोड़ना होगा। मुझे आशा है कि आप खड़े हो जाओगे। – Franklin

    +0

    @ user1694000 - गलतफहमी के लिए खेद है। तो, आप कॉलम नाम प्राप्त करना चाहते हैं टैट उन में से किसी में मौजूद नहीं है। सही? बस कॉलम नाम। –

    +0

    @ user1694000 - मेरा संपादन देखें। –

    1

    कॉलम की तुलना करने के लिए कॉलम की तुलना करने के लिए SQL सर्वर में INFORMATION_SCHEMA.COLUMNS तालिका का उपयोग करें।

    select column_name from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='your_table_name1' 
    except 
    select column_name from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='your_table_name2' 
    
    11

    यह सिर्फ लाल गेट उपकरण या मूल रूप से किसी भी तीसरे पक्ष उपकरण आप का उपयोग नहीं करना चाहते है:

    इस उदाहरण के है? क्यों नहीं, भले ही आपके पास खरीदने के लिए बजट न हो, फिर भी आप नौकरी पाने के लिए परीक्षण मोड में इसका उपयोग कर सकते हैं?

    हम Apex Diff उपकरण का उपयोग कर रहे हैं लेकिन वहां बहुत से लोग हैं।

    इतने सारे उपलब्ध उपकरणों के साथ

    आप शायद महीनों के लिए परीक्षण मोड में एक के बाद एक सभी चला सकते हैं ...

    प्रणाली तालिकाओं को जानने और कैसे यह करने के लिए मूल रूप से बहुत अच्छा है, लेकिन यह अभी भी समय लगता है ...

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