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

एसएसआईएस में गतिशील रूप से इनपुट और आउटपुट कॉलम कैसे मैप करें?

यदि आप एक समान तालिका बनाते हैं, तो आप इसे SSIS पैकेज के अंदर गतिशील रूप से कॉलम मैप करने के लिए 2 दृष्टिकोणों में उपयोग कर सकते हैं, या आपको पूरे पैकेज को प्रोग्रामेटिक रूप से बनाना होगा। इस उत्तर में मैं आपको यह कैसे करना है इसके बारे में कुछ जानकारी देने का प्रयास करूंगा।

(1) एलियासेस के साथ बिल्डिंग सोर्स SQL ​​कमांड

नोट:यह तरीका तभी काम करेगा जब सभी .dbf फाइलों में कॉलमों की संख्या समान हो लेकिन नाम अलग-अलग हों

इस दृष्टिकोण में आप SQL कमांड उत्पन्न करेंगे जिसका उपयोग FileID और आपके द्वारा बनाई गई मैपिंग तालिका के आधार पर स्रोत के रूप में किया जाएगा। आपको पता होना चाहिए कि एक वेरिएबल के अंदर संग्रहीत FileID और .dbf फ़ाइल पथ है। उदाहरण के तौर पर:

यह मानते हुए कि तालिका का नाम इनपुटआउटपुट मैपिंग है

निम्न आदेश के साथ एक निष्पादन SQL कार्य जोड़ें:

DECLARE @strQuery as VARCHAR(4000)

SET @strQuery = 'SELECT '

SELECT @strQuery = @strQuery + '[' + InputColumn + '] as [' + OutputColumn + '],'
FROM inputoutputMapping
WHERE FileID = ?

SET @strQuery = SUBSTRING(@strQuery,1,LEN(@strQuery) - 1) + ' FROM ' + CAST(? as Varchar(500))

SELECT @strQuery

और पैरामीटर मैपिंग टैब में वेरिएबल का चयन करें जिसमें पैरामीटर 0 पर मैप करने के लिए FileID शामिल है। और वेरिएबल जिसमें .dbf फ़ाइल नाम (तालिका नाम का विकल्प) से लेकर पैरामीटर 1 शामिल है

ResultSet प्रकार को Single Row पर सेट करें और ResultSet 0 . को स्टोर करें उदाहरण के रूप में टाइप स्ट्रिंग के एक चर के अंदर @[User::SourceQuery]

परिणामसेट मान इस प्रकार होगा:

SELECT [CustCd] as [CustCode],[CNAME] as [CustName],[Address] as [CustAdd] FROM database1

OLEDB Source में वैरिएबल से SQL कमांड में टेबल एक्सेस मोड का चयन करें और @[User::SourceQuery] का उपयोग करें स्रोत के रूप में चर।

(2) स्रोत के रूप में स्क्रिप्ट घटक का उपयोग करना

इस दृष्टिकोण में आपको डेटा प्रवाह कार्य के अंदर स्रोत के रूप में एक स्क्रिप्ट घटक का उपयोग करना होगा:

सबसे पहले, यदि आप उन्हें हार्ड कोड नहीं करना चाहते हैं, तो आपको स्क्रिप्ट घटक के लिए .dbf फ़ाइल पथ और SQL सर्वर कनेक्शन को चर के माध्यम से पास करना होगा।

स्क्रिप्ट संपादक के अंदर, आपको गंतव्य तालिका में पाए जाने वाले प्रत्येक स्तंभ के लिए एक आउटपुट कॉलम जोड़ना होगा और उन्हें गंतव्य पर मैप करना होगा

स्क्रिप्ट के अंदर, आपको .dbf फ़ाइल को एक डेटाटेबल में पढ़ना चाहिए:

  • C# .DBF फ़ाइलों से डेटाटेबल में पढ़ें
  • डेटाटेबल में DBF लोड करें

डेटा को डेटाटेबल में लोड करने के बाद, SQL सर्वर में आपके द्वारा बनाए गए मैपिंगटेबल में पाए गए डेटा के साथ एक और डेटाटेबल भी भरें।

उसके बाद डेटाटेबल कॉलम पर लूप करें और .ColumnName . बदलें प्रासंगिक आउटपुट कॉलम में, उदाहरण के लिए:

foreach (DataColumn col in myTable.Columns)
    {

    col.ColumnName = MappingTable.AsEnumerable().Where(x => x.FileID = 1 && x.InputColumn = col.ColumnName).Select(y => y.OutputColumn).First(); 

    }

डेटाटेबल में प्रत्येक पंक्ति पर लूप के बाद और एक स्क्रिप्ट आउटपुट पंक्ति बनाएं।

इसके अलावा, ध्यान दें कि आउटपुट पंक्तियों को निर्दिष्ट करते समय, आपको यह जांचना होगा कि कॉलम मौजूद है या नहीं, आप पहले सभी कॉलम नामों को स्ट्रिंग की सूची में जोड़ सकते हैं, फिर इसे जांचने के लिए उपयोग कर सकते हैं, उदाहरण के लिए:

var columnNames = myTable.Columns.Cast<DataColumn>()
                             .Select(x => x.ColumnName)
                             .ToList();  


foreach (DataColumn row in myTable.Rows){

if(columnNames.contains("CustCode"){

    OutputBuffer0.CustCode = row("CustCode");

}else{

    OutputBuffer0.CustCode_IsNull = True

}

//continue checking all other columns

}

यदि आपको स्रोत के रूप में स्क्रिप्ट घटक का उपयोग करने के बारे में अधिक विवरण की आवश्यकता है, तो निम्न में से किसी एक लिंक की जांच करें:

  • एसएसआईएस स्क्रिप्ट घटक स्रोत के रूप में
  • स्क्रिप्ट घटक के साथ स्रोत बनाना
  • स्रोत के रूप में स्क्रिप्ट घटक - एसएसआईएस
  • एसएसआईएस - एक स्रोत के रूप में एक स्क्रिप्ट घटक का उपयोग करना

(3) पैकेज को गतिशील रूप से बनाना

मुझे नहीं लगता कि इस लक्ष्य को प्राप्त करने के लिए आप अन्य तरीकों का उपयोग कर सकते हैं, सिवाय इसके कि आपके पास गतिशील रूप से पैकेज बनाने का विकल्प है, तो आपको इसके साथ जाना चाहिए:

  • बीआईएमएल
  • एकीकरण सेवाएं प्रबंधित ऑब्जेक्ट मॉडल
  • एज़एपी लाइब्रेरी

(4) SchemaMapper:C# स्कीमा मैपिंग क्लास लाइब्रेरी

हाल ही में मैंने गिट-हब पर एक नई परियोजना शुरू की, जो सी # का उपयोग करके विकसित एक क्लास लाइब्रेरी है। आप इसका उपयोग एक्सेल, वर्ड, पावरपॉइंट, टेक्स्ट, सीएसवी, एचटीएमएल, जेसन और एक्सएमएल से सारणीबद्ध डेटा को स्कीमा मैपिंग दृष्टिकोण का उपयोग करके एक अलग स्कीमा परिभाषा के साथ SQL सर्वर तालिका में आयात करने के लिए कर सकते हैं। इसे यहां देखें:

  • स्कीमामैपर:सी#स्कीमा मैपिंग क्लास लाइब्रेरी

चरण-दर-चरण मार्गदर्शिका के लिए आप इस विकी पृष्ठ का अनुसरण कर सकते हैं:

  • कई फ़ाइलों से डेटा को एक SQL तालिका चरण दर चरण मार्गदर्शिका में आयात करें



  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. SQL सर्वर में थोक डेटा फ़ाइलें सम्मिलित करें

  3. जांचें कि क्या तालिका में OBJECTPROPERTY () के साथ SQL सर्वर में टाइमस्टैम्प कॉलम है

  4. SQL सर्वर में सबसे छोटी अप्रयुक्त संख्या खोजें

  5. SQL सर्वर में पहचान () संपत्ति का उपयोग कैसे करें