गैर यूनिकोड स्ट्रिंग को यूनिकोड स्ट्रिंग SSIS में परिवर्तित करना


9

मैं एक पैकेज बना रहा हूं जहां मैं डेटाबेस से खाली एक्सेल फाइल में डेटा निर्यात करूंगा। जब मैंने केवल स्रोत और गंतव्य घटकों को जोड़ा और मैंने पैकेज को चलाया तो मुझे आउटपुट कॉलम और कॉलम "A" मिला, जो यूनिकोड और गैर-यूनिकोड स्ट्रिंग डेटा प्रकारों के बीच परिवर्तित नहीं हो सका।

इसे ठीक करने के लिए मैंने एक डेटा रूपांतरण घटक जोड़ा और सभी कॉलम को इसमें परिवर्तित कर दिया

"यूनिकोड स्ट्रिंग [DT_WSTR]"

और मुझे अब त्रुटि नहीं मिली। एकमात्र समस्या यह है कि मेरे पास लगभग 50 कॉलम थे जहां मुझे 1 से 1 जाना था और ड्रॉप डाउन सूची से "यूनिकोड स्ट्रिंग [DT_WSTR]" का चयन करना था। फिर मुझे गंतव्य घटक में जाना पड़ा और अपनी एक्सेल फाइल में नए परिवर्तित कॉलमों को मैप करना पड़ा।

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

मैं समझता हूं कि डेटा आयात करने और निर्यात करने के लिए एक्सेल फाइलें सबसे अच्छा तरीका नहीं हैं, लेकिन इस विशेष मामले में यह आवश्यक है।

मैं एक सपाट पाठ फ़ाइल को निर्यात करने का एक तरीका खोज सकता हूं और फिर पैकेज में अंतिम चरण के रूप में एक्सेल में बदलने की कोशिश कर सकता हूं। मैं एक ही यूनिकोड / गैर-रूपांतरण रूपांतरण त्रुटि वाले इस अभ्यस्त ट्रिगर को नहीं रोक रहा हूँ।


उसके बाद आपकी कार्पल टनल सिंड्रॉम कैसी है? :-)
पैट्रिक होनोरेज़

सुनिश्चित करें कि आप जिस डेटा को स्थानांतरित करते हैं, वह यूनिकोड डेटा प्रकारों का उपयोग कर रहा है (यानी: ncharchar (50) के बजाय varchar (50))
MacGyver

जवाबों:


15

RDC के विकल्प के रूप में, मैं सिर्फ SSIS में डेटा प्रकारों को परिवर्तित करना छोड़ दूँगा और स्पष्ट रूप से उन्हें अपने स्रोत क्वेरी में nvarchar के रूप में डालूँगा।

प्रयोग

अपने स्रोत क्वेरी में (और आप स्रोत क्वेरी का उपयोग कर रहे हैं और केवल ड्रॉप डाउन में तालिका का चयन नहीं कर रहे हैं ), स्पष्ट रूप से एक उपयुक्त n (var) चार लंबाई में चीजें डाली।

के बजाय

SELECT
    E.BusinessEntityID
,   E.NationalIDNumber
,   E.LoginID
,   E.JobTitle
,   E.BirthDate
,   E.MaritalStatus
,   E.Gender
FROM
    HumanResources.Employee AS E

जैसे कोई क्वेरी का उपयोग करें

SELECT
    CAST(E.BusinessEntityID AS nvarchar(10)) AS BusinessEntityID
,   CAST(E.NationalIDNumber AS nvarchar(15)) AS NationalIDNumber
,   CAST(E.LoginID AS nvarchar(256)) AS LoginID
,   CAST(E.JobTitle AS nvarchar(50)) AS JobTitle
,   CAST(E.BirthDate AS nvarchar(10)) AS BirthDate
,   CAST(E.MaritalStatus AS nchar(1)) AS MaritalStatus
,   CAST(E.Gender AS nchar(1)) AS Gender
FROM
    HumanResources.Employee AS E

एडवेंचरवर्क्स के सूक्ष्म छात्र पहचान लेंगे कि डेटा पहले से ही एक n(var)charप्रकार था लेकिन यह केवल अवधारणा को प्रदर्शित करने के लिए था।

लाभ

  • कम मेमोरी का उपयोग किया। वर्तमान में, आप Data Conversion ComponentSSIS का उपयोग करके "समान" डेटा की दो प्रतियाँ आवंटित और जमा कर रहे होंगे
  • कोई आरएसआई नहीं । N बार क्लिक करने की आवश्यकता नहीं है और वे जो भी थोड़ा सा संपादक प्रदान करते हैं उसमें सभी जानकारी निर्दिष्ट करते हैं। मैं "एक्सेल रेडी" टेबल निर्यात की पीढ़ी को स्वचालित करने के लिए dmv / info_schema के खिलाफ एक क्वेरी का उपयोग करूँगा।
  • कोई कस्टम घटक स्थापना। मैंने उन स्थानों पर काम किया है जहाँ खुले स्रोत को स्थापित करना शब्दशः था। थर्ड पार्टी ऐप्स इंस्टॉल करने के लिए एक आस्थगित रखरखाव लागत भी है क्योंकि अब "सभी" को आपके कोड को बनाए रखने के लिए उसी ऐप को इंस्टॉल करने की आवश्यकता है और इसे सर्वर पर इंस्टॉल करने की आवश्यकता है और इन्फोसिस को यह सुनिश्चित करने के लिए असेंबली की जांच करने की आवश्यकता है कि वे वैध हैं और हमें उन लोगों की ओर से साइनऑफ़ की ज़रूरत है, जो आपसे आगे निकल गए ...

1
"आरडीसी के विकल्प के रूप में" - आरडीसी क्या है? जब मैं अगले उत्तर पर पढ़ता हूं, तो मुझे लगता है कि आपका मतलब हो सकता है कि आप डेटा घटक की जगह ले सकते हैं, लेकिन जैसा कि मूल पोस्ट के लेखक ने उस घटक का उल्लेख नहीं किया है, एक संक्षिप्त रूप में बहुत जल्दी हो सकता है। :-)
थ्रोंक

आरएसआई के बारे में बोलना, CONVERT50 बार चिपकाना आसान होना चाहिए CAST, क्योंकि तर्क सामने हैं
पैट्रिक होनॉरेज़

5

मूल रूप से, ऐसा करने का कोई तरीका नहीं है। लेकिन आप डाउनलोड कर सकते हैं - कोडप्लेक्स से एसएसआईएस के लिए डेटा रूपांतरण घटक की जगह और एक शॉट में ऐसा करें।

अधिक जानकारी यहां पाई जा सकती है


2

यदि आपको केवल "यूनिकोड स्ट्रिंग (DT_WSTR)" से "स्ट्रिंग (DT_STR)" या इसके विपरीत बदलना है, तो आप ऐसा कर सकते हैं:

  1. अपने पैकेज की एक प्रति सहेजें ।tsx- फ़ाइल (उस स्थिति में जिसे आपको पुनर्प्राप्त करना चाहिए)
  2. एक संपादक में package.dtsx खोलें, या MS Visual Studio में पैकेज पर राइट-क्लिक करें और "व्यू कोड" चुनें। आपको एक XML-File दिखाई देगी।

स्ट्रिंग के लिए खोजें DTS:DataTypeयदि इसके बाद = "130" है, तो कॉलम को DT_WSTR (यूनिकोड) के रूप में परिभाषित किया गया है।

यदि इसके बाद = "129", तो कॉलम को DT_STR (गैर-यूनिकोड) के रूप में परिभाषित किया गया है, खोज का उपयोग करें और देखभाल के साथ बदलें (आपने पहले एक प्रतिलिपि बनाई थी, क्या आपने नहीं?)

फ़ाइल सहेजें और शायद यह था।


1
DBA SE पर आपका स्वागत है! प्रो टिप: आपकी पोस्ट को बेहतर दिखने के लिए साइट में विभिन्न पाठ स्वरूपण सुविधाएँ हैं। संपादक टेक्स्टबॉक्स के शीर्ष पर दिए गए आइकन का उपयोग करें।
पीटर - मोनिका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.