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

मैं OLE DB स्रोत घटक में संग्रहीत कार्यविधि पैरामीटर के लिए मान कैसे पास करूं?

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

मुझे लगता है कि आपका पैकेज कुछ इस तरह दिखेगा

"एसक्यूएल लोड रिकॉर्डसेट" नामक एक निष्पादित एसक्यूएल कार्य, "एफईएलसी श्रेड रिकॉर्डसेट" नामक फ़ोरैच लूप कंटेनर से जुड़ा हुआ है। वहां नेस्टेड मेरे पास एक फाइल सिस्टम टास्क है, जिसका नाम "FST कॉपी टेम्प्लेट" है, जो डेटा फ्लो टास्क के लिए एक प्राथमिकता है, जिसका नाम "DFT जेनरेट आउटपुट" है।

सेट अप करें

जैसा कि आप एक नौसिखिया हैं, मैं विस्तार से कोशिश करने और समझाने जा रहा हूं। अपने आप को कुछ परेशानी से बचाने के लिए, BIDSHelper की एक प्रति प्राप्त करें। यह एक मुफ़्त, खुला स्रोत टूल है जो BIDS/SSDT में डिज़ाइन के अनुभव को बेहतर बनाता है।

चर

अपने नियंत्रण प्रवाह की पृष्ठभूमि पर क्लिक करें। कुछ भी चयनित न होने पर, राइट-क्लिक करें और वेरिएबल्स चुनें। पॉप अप होने वाली नई विंडो में, उस बटन पर क्लिक करें जो 4 बार एक नया चर बनाता है। कुछ भी नहीं पर क्लिक करने का कारण यह है कि SQL सर्वर 2012 तक, चर निर्माण का डिफ़ॉल्ट व्यवहार उन्हें वर्तमान वस्तु के दायरे में बनाना है। इसके परिणामस्वरूप नए और अनुभवी डेवलपर्स के लिए समान रूप से कई बाल झड़ गए हैं। वेरिएबल नाम केस संवेदी होते हैं इसलिए इसके बारे में भी जागरूक रहें।

  1. रिकॉर्डसेट में वेरिएबल का नाम बदलें। डेटा प्रकार को Int32 से ऑब्जेक्ट में बदलें
  2. Variable1 का नाम बदलकर ParameterValue कर दें। डेटा प्रकार को Int32 से String में बदलें
  3. Variable2 का नाम बदलकर TemplateFile कर दें। डेटा प्रकार को Int32 से स्ट्रिंग में बदलें। मान को अपने आउटपुट एक्सेल फ़ाइल के पथ पर सेट करें। मैंने इस्तेमाल किया C:\ssisdata\ShredRecordset.xlsx
  4. वैरिएबल 4 का नाम बदलकर OutputFileName कर दें। डेटा प्रकार को Int32 से स्ट्रिंग में बदलें। यहां हम कुछ उन्नत करने जा रहे हैं। वेरिएबल पर क्लिक करें और गुण विंडो लाने के लिए F4 दबाएं। EvaluateAsExpression के मान को True में बदलें। एक्सप्रेशन में, इसे "C:\\ssisdata\\ShredRecordset." + @[User::ParameterValue] + ".xlsx" (या आपकी फ़ाइल और पथ जो भी हो)। यह क्या करता है, ParameterValue परिवर्तन के मान के रूप में बदलने के लिए एक चर को कॉन्फ़िगर करता है। यह सुनिश्चित करने में मदद करता है कि हमें एक अद्वितीय फ़ाइल नाम मिले। नामकरण परंपरा को आवश्यकतानुसार बदलने के लिए आपका स्वागत है। ध्यान दें कि आपको \ . से बचना होगा जब भी आप अभिव्यक्ति में हों।

कनेक्शन प्रबंधक

मैंने अनुमान लगाया है कि आप ओएलई डीबी कनेक्शन मैनेजर का उपयोग कर रहे हैं। मेरा नाम FOO है। यदि आप ADO.NET का उपयोग कर रहे हैं तो अवधारणाएं समान होंगी लेकिन पैरामीटर और इस तरह से संबंधित बारीकियां होंगी।

एक्सेल को संभालने के लिए आपको दूसरे कनेक्शन मैनेजर की भी आवश्यकता होगी। यदि एसएसआईएस डेटा प्रकारों के बारे में मनमौजी है, तो एक्सेल डेटा प्रकारों के बारे में मानसिक-स्टैब-यू-इन-द-बैक-विद-ए-फोर्क-जबकि आप सो रहे हैं। हम प्रतीक्षा करने जा रहे हैं और यह सुनिश्चित करने के लिए कि हमारे प्रकार अच्छे हैं, यह सुनिश्चित करने के लिए डेटा प्रवाह वास्तव में यह कनेक्शन प्रबंधक बनाता है।

परिणाम सेट के लिए स्रोत क्वेरी

SQL Load Recordset SQL कार्य निष्पादित करने का एक उदाहरण है। यहाँ मेरे पास आपके स्रोत की नकल करने के लिए एक सरल प्रश्न है।

SELECT 'aq' AS parameterValue
UNION ALL SELECT 'dr'
UNION ALL SELECT 'tb'

सामान्य टैब पर ध्यान देने योग्य बात यह है कि मैंने अपने परिणामसेट को None . से बदल दिया है करने के लिए Full result set . ऐसा करने से रिजल्ट सेट टैब धूसर से प्रयोग करने योग्य हो जाता है।

आप देख सकते हैं कि मैंने ऊपर बनाए गए वेरिएबल को वैरिएबल नाम असाइन किया है (उपयोगकर्ता::रिकॉर्डसेट) और I परिणाम का नाम 0 है . यह डिफ़ॉल्ट मान के रूप में महत्वपूर्ण है, NewResultName काम नहीं करता।

FELC श्रेड रिकॉर्डसेट

फ़ोरैच लूप कंटेनर को पकड़ो और हम इसका उपयोग पिछले चरण में उत्पन्न परिणामों को "श्रेड" करने के लिए करेंगे।

एन्यूमरेटर को Foreach ADO Enumerator के रूप में कॉन्फ़िगर करें User::RecordSet का उपयोग करें आपके एडीओ ऑब्जेक्ट स्रोत चर के रूप में। rows in the first table चुनें आपके एन्यूमरेशन मोड के रूप में

वैरिएबल मैपिंग टैब पर, आपको अपना वैरिएबल User::ParameterValue चुनना होगा और इसे 0 का इंडेक्स असाइन करें। इसके परिणामस्वरूप आपके रिकॉर्डसेट ऑब्जेक्ट में ज़ीरोथ तत्व वैरिएबल पैरामीटरवैल्यू को असाइन किया जाएगा। यह महत्वपूर्ण है कि आपके पास डेटा प्रकार समझौता है क्योंकि एसएसआईएस यहां निहित रूपांतरण नहीं करेगा।

FST कॉपी टेम्प्लेट

यह एक फाइल सिस्टम टास्क है। हम अपने टेम्पलेट एक्सेल फाइल को कॉपी करने जा रहे हैं ताकि हमारे पास एक अच्छी तरह से नामित आउटपुट फाइल हो (इसमें पैरामीटर नाम है)। इसे इस रूप में कॉन्फ़िगर करें

  • IsDestinationPathVariable:सही
  • गंतव्य चर:उपयोगकर्ता::आउटपुटफ़ाइलनाम
  • ओवरराइट डेस्टिनेशन:ट्रू
  • ऑपरेशन:कॉपी फाइल
  • IsSourcePathVariable:सच
  • स्रोत चर:उपयोगकर्ता::टेम्पलेटफ़ाइल

DFT जनरेट आउटपुट

यह डेटा प्रवाह कार्य है। मैं मान रहा हूँ कि आप परिणाम सीधे एक फ़ाइल में डंप कर रहे हैं, इसलिए हमें केवल एक OLE DB स्रोत और एक Excel गंतव्य की आवश्यकता होगी

OLEDB dbo_storedProcedure1

यह वह जगह है जहां आपका डेटा आपके स्रोत सिस्टम से उस पैरामीटर के साथ खींचा जाता है जिसे हमने नियंत्रण प्रवाह में काट दिया था। मैं यहां अपनी क्वेरी लिखने जा रहा हूं और ? . का उपयोग करूंगा यह इंगित करने के लिए कि इसका एक पैरामीटर है।

अपने डेटा एक्सेस मोड को "एसक्यूएल कमांड" में बदलें और उपलब्ध एसक्यूएल कमांड टेक्स्ट में अपनी क्वेरी डालें

EXECUTE dbo.storedProcedure1 ?

मैं पैरामीटर... बटन पर क्लिक करता हूं और इसे दिखाए गए अनुसार भरता हूं

  • पैरामीटर:@parameterValue
  • चर:उपयोगकर्ता ::पैरामीटर मान
  • परम दिशा:इनपुट

एक्सेल डेस्टिनेशन को OLE DB सोर्स से कनेक्ट करें। डबल क्लिक करें और Excel कनेक्शन प्रबंधक अनुभाग में, नया क्लिक करें... निर्धारित करें कि क्या आपको 2003 या 2007 प्रारूप (.xls बनाम .xlsx) की आवश्यकता है और क्या आप चाहते हैं कि आपकी फ़ाइल में शीर्षलेख पंक्तियाँ हों। आपके लिए फ़ाइल पथ, वही मान डालें जो आपने अपने @User::TemplatePath चर के लिए उपयोग किया था और ठीक क्लिक करें।

अब हमें एक्सेल शीट का नाम भरना है। उस पर क्लिक करें नया... बटन और यह भौंक सकता है कि डेटा प्रकारों की मैपिंग के बारे में पर्याप्त जानकारी नहीं है। चिंता न करें, यह अर्ध-मानक है। इसके बाद यह एक टेबल परिभाषा को कुछ इस तरह से पॉप अप करेगा

CREATE TABLE `Excel Destination` (
    `name` NVARCHAR(35),
    `number` INT,
    `type` NVARCHAR(3),
    `low` INT,
    `high` INT,
    `status` INT
)

"टेबल" नाम वर्कशीट का नाम, या ठीक, वर्कशीट में नामित डेटा सेट होने वाला है। मैंने अपना शीट 1 बनाया और ओके पर क्लिक किया। अब जबकि शीट मौजूद है, इसे ड्रॉप डाउन में चुनें। मैं लक्ष्य पत्रक नाम के रूप में Sheet1$ के साथ गया था। सुनिश्चित नहीं है कि इससे कोई फर्क पड़ता है।

मैपिंग टैब पर क्लिक करें और चीजें ऑटो-मैप ठीक होनी चाहिए इसलिए ओके पर क्लिक करें।

आखिरकार

इस बिंदु पर, यदि हम पैकेज चलाते हैं तो यह हर बार टेम्पलेट फ़ाइल को अधिलेखित कर देगा। रहस्य यह है कि हमें यह बताना होगा कि Excel Connection Manager हमने अभी यह बनाया है कि इसके लिए हार्ड कोडेड नाम की आवश्यकता नहीं है।

कनेक्शन प्रबंधक टैब में एक्सेल कनेक्शन प्रबंधक पर एक बार क्लिक करें। प्रॉपर्टीज विंडो में, Expressions ढूंढें अनुभाग और दीर्घवृत्त क्लिक करें ... यहां हम संपत्ति को कॉन्फ़िगर करेंगे ExcelFilePath और हम जिस एक्सप्रेशन का उपयोग करेंगे वह है@[User::OutputFileName]

यदि आपके आइकन और ऐसे अलग दिखते हैं, तो इसकी उम्मीद की जा सकती है। यह SSIS 2012 का उपयोग करके प्रलेखित किया गया था। आपका कार्य प्रवाह 2005 और 2008/2008R2 में समान होगा बस त्वचा अलग है।

यदि आप इस पैकेज को चलाते हैं और यह शुरू भी नहीं होता है और एसीई 12 या जेट 4.0 के बारे में कोई त्रुटि है जो उपलब्ध नहीं है, तो आप 64 बिट मशीन पर हैं और आपको बीआईडीएस/एसएसडीटी को यह बताना होगा कि आप 32 बिट में चलाना चाहते हैं। मोड।

सुनिश्चित करें कि Run64BitRuntime मान False है . यह प्रोजेक्ट सेटिंग प्रोजेक्ट पर राइट क्लिक करके पाया जा सकता है, कॉन्फ़िगरेशन गुणों का विस्तार करें और यह डिबगिंग के तहत एक विकल्प होगा।

आगे पढ़ना

एक एसएसआईएस पैकेज के साथ एक संग्रहीत कार्यविधि के निष्पादन को स्वचालित कैसे करें पर एक रिकॉर्डसेट ऑब्जेक्ट को श्रेड करने का एक अलग उदाहरण पाया जा सकता है?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस योजना, ऑटोइनक्रिकमेंट

  2. क्या SQL सर्वर एक्सप्रेस के लिए SQL सर्वर प्रोफाइलर है?

  3. आप SSMS में ntext या nvarchar (अधिकतम) से सभी पाठ कैसे देखते हैं?

  4. बड़ी तालिकाओं के लिए SQL सर्वर सांख्यिकी कैसे अपडेट करें

  5. एसक्यूएल, परिणामों को कैसे संयोजित करें?