2009-05-18 13 views
6

का उपयोग कर अद्यतन तालिका मैं एक सामान्य कुंजी के आधार पर किसी अन्य तालिका से डेटा के साथ तालिका में एक फ़ील्ड को अपडेट करने का प्रयास कर रहा हूं। यदि यह सीधे एसक्यूएल में थे, यह की तरह कुछ होगा:एसएसआईएस

Update EHSIT 
set e.IDMSObjID = s.IDMSObjID 
from EHSIT e, EHSIDMS s 
where e.SITENUM = s.SITE_CODE 

हालांकि, दो तालिकाओं में एक ही डेटाबेस में नहीं कर रहे हैं, इसलिए मैं अद्यतन करने के लिए लघु उद्योगों का उपयोग करने की कोशिश कर रहा हूँ। ओह, और साइटनम/साइटकोड एक दूसरे में वर्चर हैं और दूसरे में nvarchar हैं, इसलिए मुझे डेटा रूपांतरण करना होगा ताकि वे मेल खा सकें।

मैं इसे कैसे कर सकता हूं?
मेरे पास डेटा प्रवाह ऑब्जेक्ट है, स्रोत के साथ ईएचएसआईडीएमएस और गंतव्य ईएचएसआईटी के रूप में। मेरे पास यूनिकोड को गैर-यूनिकोड में बदलने के लिए एक डेटा रूपांतरण है। लेकिन मैं मैच के आधार पर कैसे अपडेट करूं? मैंने डेटा एक्सेस मोड के रूप में SQL कमांड का उपयोग करके गंतव्य के साथ प्रयास किया है, लेकिन इसमें स्रोत तालिका प्रतीत नहीं होती है। यदि मैं बस अपडेट करने के लिए फ़ील्ड को मैप करता हूं, तो यह फ़ील्ड मिलान के आधार पर इसे कैसे सीमित करता है?

मैं एक्सेल या कुछ में अपनी स्रोत तालिका निर्यात करने जा रहा हूं, और फिर वहां से इनपुट करने का प्रयास कर रहा हूं, हालांकि ऐसा लगता है कि मुझे वह सब मिल जाएगा जो डेटा रूपांतरण चरण को हटाना होगा।

कोई अपडेट डेटा कार्य या कुछ नहीं होना चाहिए? क्या यह उन डेटा प्रवाह परिवर्तन कार्यों में से एक है, और मैं यह नहीं समझ रहा हूं कि यह कौन सा है?

उत्तर

8

आप SQLCommand (पैरामीटर के साथ) का उपयोग कर सकते हैं लेकिन आप प्रभावी रूप से प्रत्येक पंक्ति के लिए UPDATE लिखेंगे। मुझे गंतव्य पक्ष पर एक स्टेजिंग टेबल लिखना बेहतर लगता है (या तो दूरस्थ पक्ष से सभी डेटा या एसएसआईएस द्वारा निर्धारित डेटा को बदलने के लिए) और अद्यतन करने के लिए एक एकल SQL UPDATE का उपयोग करें।

+1

ठीक है, यह काम करता है। मैंने अपने गंतव्य डीबी में एक अस्थायी तालिका बनाई, इसके लिए डेटा कॉपी किया, और फिर मेरा एक फ़ील्ड भरने के लिए अद्यतन कथन का उपयोग किया। अस्थायी तालिका हटाएं, और मैं कर रहा हूँ। धन्यवाद। – thursdaysgeek

+1

हमेशा एक स्टेजिंग टेबल का उपयोग करने का प्रयास करें, डेटा के ब्लॉक में सोचने का प्रयास करें। यदि आपके पास 1 मिलियन रिकॉर्ड हैं जिन्हें टी अपडेट किया जाना आवश्यक है तो अद्यतन रिकॉर्ड के साथ प्रत्येक रिकॉर्ड को अपडेट करना बहुत धीमा है। इसलिए आपको अपडेट करने के लिए 1 सिंगल टेबल और स्टेटमेंट का उपयोग करना चाहिए। – JSC

2

आप हमेशा पूर्ण डेटाबेस नाम का उपयोग कर सकते हैं।

UPDATE server1.databasename.EHSIT 
SET E.IDMSOBJID = S.IDMSOBJID 
FROM server1.databasename.EHSIT E, server2.databasename.EHSIDMS S 
WHERE E.SITENUM = S.SITE_CODE 



[serverpath].[database].[databaseobject] 
0

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

डेवट्रॉन, मैंने कोशिश की है और सर्वर पथ के बारे में त्रुटियां प्राप्त की हैं, इसमें बहुत सारे हैं। मुझे यह भी बताया गया था कि यह अत्यधिक ध्यान दिया जाता है, खासकर यदि यह एक ऑपरेशन है जो बहुत कुछ होता है।

+2

धीरे-धीरे बदलते आयाम नौकरी करेंगे, लेकिन बड़ी मात्रा में डेटा पर बहुत धीमी है (इस तथ्य के कारण कि यह पंक्ति क्रियाओं से पंक्तिबद्ध है - ऊपर जेएससी की टिप्पणी देखें) –

+0

नीचे देखा गया? मुझे नहीं लगता। मेरे अद्यतन उदाहरण का उपयोग करके, आपको लेनदेन करने के लिए एसएसआईएस की भी आवश्यकता नहीं है। यह आपके नेटवर्क सेटअप और आपके लिंक किए गए डेटाबेस कॉन्फ़िगरेशन पर भी निर्भर करता है। – D3vtr0n

0

I would use a lookup transformation स्टेजिंग की कोई आवश्यकता नहीं - एसक्यूएल कोड लिखने की कोई आवश्यकता नहीं - यह एसएसआईएस का तरीका था!

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