Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

दो समान डेटाबेस डेटा को एक में कैसे मर्ज करें?

आप कहते हैं कि दोनों ग्राहक आपके एप्लिकेशन का उपयोग कर रहे हैं, इसलिए मुझे लगता है कि यह किसी प्रकार का "सिकुड़-रैप" सॉफ़्टवेयर है जिसका उपयोग केवल इन दोनों की तुलना में अधिक ग्राहकों द्वारा किया जाता है, सही?

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

मैं आपकी किसी भी तालिका को बदले बिना या कोई कॉलम जोड़े बिना इसे करने का एक आसान तरीका सोच सकता हूं।
इसे काम करने के लिए, आपको दोनों डेटाबेस में एक साथ मौजूद सबसे बड़ी आईडी का पता लगाना होगा ( कोई फर्क नहीं पड़ता कि वह किस तालिका में या किस डेटाबेस में है)

इस तरह दिखने वाली बहुत सी क्वेरी प्राप्त करने के लिए इसे कुछ कॉपी और पेस्ट की आवश्यकता हो सकती है:

select max(id) as maxlocationid from locations
select max(id) as maxpersonid from persons
-- and so on... (one query for each table)

जब आप दोनों डेटाबेस में क्वेरी चलाने के बाद सबसे बड़ी आईडी पाते हैं, तो एक संख्या लें जो उस आईडी से बड़ी हो, और इसे दूसरे डेटाबेस में सभी तालिकाओं में सभी आईडी में जोड़ें।
यह बहुत महत्वपूर्ण है कि संख्या दोनों डेटाबेस में पहले से मौजूद सबसे बड़ी आईडी से बड़ा होना चाहिए!

इसे समझाना थोड़ा मुश्किल है, इसलिए यहां एक उदाहरण दिया गया है:

मान लें कि दोनों डेटाबेस में किसी भी तालिका में सबसे बड़ी आईडी 8000 है .
फिर आप कुछ SQL चलाते हैं जो 10000 . जोड़ता है दूसरे डेटाबेस . में प्रत्येक तालिका में प्रत्येक आईडी के लिए :

update Locations set Id = Id + 10000
update Persons set Id = Id + 10000, LocationId = LocationId + 10000
-- and so on, for each table

क्वेरी अपेक्षाकृत सरल हैं, लेकिन यह सबसे अधिक काम है क्योंकि आपको डेटाबेस में प्रत्येक तालिका के लिए सभी आईडी कॉलम के सही नामों के साथ मैन्युअल रूप से इस तरह की एक क्वेरी बनानी होगी।

दूसरे डेटाबेस पर क्वेरी चलाने के बाद, आपके प्रश्न का उदाहरण डेटा इस तरह दिखेगा:

डेटाबेस 1: (बिल्कुल पहले की तरह)

Locations :

Id    Name         Adress   etc....
1     Location 1
2     Location 2

Persons :

Id    LocationId     Name     etc...
1     1              Alex
2     1              Peter
3     2              Lisa

डेटाबेस 2:

Locations :

Id    Name         Adress   etc....
10001 Location A
10002 Location B

Persons :

Id    LocationId     Name     etc...
10001 10001          Mark
10002 10002          Ashley
10003 10001          Ben

और बस! अब आप बिना किसी प्राथमिक कुंजी उल्लंघन के डेटा को एक डेटाबेस से दूसरे डेटाबेस में आयात कर सकते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL तालिका से डुप्लिकेट पंक्तियों को हटाना (एकाधिक स्तंभों के मानों के आधार पर)

  2. समग्र प्राथमिक कुंजी के साथ किसी अन्य तालिका से INSERT या अद्यतन तालिका

  3. SQL सर्वर - दो तालिकाओं में तिथियों के आधार पर नवीनतम रिकॉर्ड कैसे प्रदर्शित करें?

  4. डेटाटाइम पिकर का उपयोग करके एसक्यूएल डेटाबेस से डेटा पढ़ें

  5. एमएस एक्सेल - स्थानीय टेबल (शीट) के साथ बाहरी (एसक्यूएल) डेटा में शामिल हों