2012-11-16 10 views
5

मैं सत्यापन करने और लाइव में सम्मिलित करने के लिए स्टेजिंग टेबल का उपयोग कर रहा हूं।एसक्यूएल सर्वर - स्टेजिंग टेबल से डेटा कॉपी करें

मान लीजिए मैं के रूप में

TABLE Persons_Staging 
(
Id int NOT NULL, 
LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
HouseNumber varchar(255), 
) 

इस प्रकार एक मेज व्यक्तियों

TABLE Persons 
(
Id int NOT NULL, 
LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
HouseNumber int, 
) 

और एक स्टेजिंग तालिका है मैं मचान तालिका से करने के लिए डेटा स्थानांतरित करने के लिए एक प्रक्रिया लिखने की ज़रूरत लाइव टेबल जबकि कोई डुप्लीकेट डालने को सुनिश्चित नहीं किया जाता है। मैं उसे कैसे प्राप्त कर सकता हूं?

अग्रिम धन्यवाद

+1

मैं मैन्युअल रूप से साल के लिए कुछ इस तरह से नहीं किया है, और है पूरी तरह गैर-उत्पादक के रूप में इस तरह के कार्य को देखने के लिए आओ। यह अभी के लिए एक विकल्प नहीं हो सकता है, लेकिन दीर्घकालिक, डेटाबेस तुलना उपकरण प्राप्त करने पर विचार करें। ये सभी भारी भारोत्तोलन करने के लिए डिज़ाइन किए गए हैं, जिससे आप विकास कार्य पर ध्यान केंद्रित कर सकते हैं। मैं रेडगेट के उपकरण का उपयोग करता हूं। उनके पास नि: शुल्क परीक्षण है। http://www.red-gate.com –

उत्तर

9

MERGE आदेश का उपयोग करें।

कुछ इस तरह:

MERGE 
    INTO Persons AS TARGET 
    USING Persons_Staging AS SOURCE 
    ON TARGET.ID = SOURCE.ID 
    --WHEN MATCHED 
    -- THEN UPDATE??? 
    WHEN NOT MATCHED BY TARGET 
     THEN INSERT (Id , LastName , FirstName, HouseNumber) 
    VALUES (SOURCE.Id , SOURCE.LastName , SOURCE.FirstName, SOURCE.HouseNumber) 
    -- WHEN NOT MATCHED BY SOURCE 
    -- THEN DELETE??? 
; 

आप मौजूदा रिकॉर्ड को अपडेट करना चाहते हैं तो आप UPDATE हिस्सा uncomment और एक उपयुक्त अद्यतन खंड जोड़ें। हटाए गए भाग के साथ ही वही।

+1

+1 'MERGE' आदेश के लिए सही उपयोग केस +1! –

+0

धन्यवाद, मैं इसे MERGE कमांड का उपयोग करके काम करने में कामयाब रहा! – dopplesoldner

0

आप सभी डेटा प्राप्त करने के लिए दोनों टेबलों पर बाएं बाहरी जुड़ने के साथ इसका उपयोग कर सकते हैं जो समान नहीं है। यही कारण है कि डेटा आप तो अपने स्तंभ में सम्मिलित कर सकते

INSERT INTO Tab1(front,end,number) 
SELECT first,last,nr from tab2 LEFT OUTER JOIN tab1 ON front = first AND last = end AND convert(int,number) = CONVERT(int,nr) 
WHERE tab1.ID is null 

इस, काम कर सकता था दूसरी ओर वहाँ सामान के इस प्रकार के लिए बने उपकरण हैं पर

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