2011-04-01 12 views
5

SQL सर्वर 2008 में, स्रोत तालिका से डेटा को एक dest तालिका में सम्मिलित करना संभव है और एक ही समय में dest तालिका से @@ पहचान के साथ स्रोत तालिका अद्यतन करना संभव है?स्रोत और अद्यतन स्रोत

उदाहरण

टेबल स्रोत:

Id - UniqueId 
Name - varchar(10) 
RealId [null] - int 

टेबल डेस्ट

Id - [id] INT identity 
Name - varchar(10) 

मैं डेस्ट में स्रोत से पंक्तियों स्थानांतरित करते हैं और से @@ पहचान मूल्य के लिए RealId अपडेट करना चाहते हैं डेस्ट टेबल

मैं किसी भी तरह से स्रोत को संशोधित कर सकता हूं, गंतव्य तालिका को बदला नहीं जा सकता है।

यहां मेरे सर्वोत्तम विकल्प क्या हैं?

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

(वास्तविक तालिकाओं और अधिक जटिल हैं, लेकिन यह देने के लिए और जो मैं चाहता के विचार करना चाहिए)

+1

पहली टिप्पणी: '@@ पहचान 'के बजाय 'SCOPE_IDENTITY()' का उपयोग करें - यह वास्तव में आप जो खोज रहे हैं उसके लिए सुरक्षित और अधिक सत्य है। दूसरा: यदि आप भाग में डालना चाहते हैं और फिर स्रोत अपडेट करना चाहते हैं, तो आपको ** कुछ ** फ़ील्ड होना चाहिए जो दोनों में समान है - यदि 'name' ऐसा नहीं कर सकता है, तो आपको कुछ और चाहिए, उदा। 'DestI तालिका' या कुछ पर 'SourceId'। –

उत्तर

4

इस सवाल पर एक नज़र डालें। Using merge..output to get mapping between source.id and target.id। आप आईडी के स्रोत और लक्ष्य के बीच एक लिंक के साथ तालिका चर प्राप्त करने के लिए विलय से आउटपुट का उपयोग कर सकते हैं। फिर आप अपनी स्रोत तालिका को अपडेट करने के लिए उस तालिका का उपयोग कर सकते हैं।

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