जैसा कि @Yuck और @devarc ने नोट किया है, दो अलग और अलग मान हैं एक चर धारण करता है। डिज़ाइन-टाइम मान वह मान है जिसे आप पहली बार वैरिएबल बनाते समय असाइन करते हैं। आपके मामले में, वेरिएबल C:\Test.txt को डिज़ाइन-टाइम मान के रूप में रखता है। हर बार जब आप पैकेज खोलते हैं, तो यह C:\Test.txt दिखाएगा जब तक कि आप इसे
. में नहीं बदलते
पैकेज के चलने के दौरान परिवर्तनशील परिवर्तन का मान बनाने के लिए, आपके विकल्प या तो मान सेट करने या इसकी गणना करने के लिए हैं। यहां मैंने एक पैकेज-स्तरीय वैरिएबल CurrentFile
created बनाया है C:\Test.txt
एक बात जो अक्सर लोगों को परेशान करती है, वह यह है कि उन्होंने रन-टाइम मान को सही ढंग से बदल दिया है, लेकिन जब वे इसे BIDS में चलाते हैं, तो उन्हें "पुराना" मान दिखाई देता है। वैरिएबल विंडो में प्रदर्शित मान पैकेज निष्पादन के दौरान नहीं बदलता है।
पैकेज निष्पादन के दौरान, मेरी वेरिएबल विंडो अभी भी डिज़ाइन-टाइम मान (C:\Test.txt) दिखाती है, लेकिन वास्तविक मान स्थानीय विंडो (C:\Test2.txt)
में दिखाई देता है।मान सेट करना
SSIS में किसी भी चीज़ का मूल्य वर्बोज़ कमांड-लाइन विकल्प या कॉन्फ़िगरेशन के ज़रिए स्रोत। मेरे दिमाग में सबसे बड़ा अंतर यह है कि यह दृष्टिकोण यह है कि मूल्य हमेशा पैकेज निष्पादन के पूरे जीवनकाल के लिए मूल्य होगा। किसी पैकेज के अनुक्रमिक या समानांतर आमंत्रण उस मान को बदल सकते हैं लेकिन उस . के लिए निष्पादन मूल्य स्थिर रहेगा (मान के स्पष्ट संशोधन को छोड़कर।
/सेट
कमांड-लाइन निष्पादन (dtexec.exe), पैकेज पर राइट क्लिक करना और फाइल सिस्टम (dtexecUI.exe) से चलना या SQL सर्वर इंटीग्रेशन सर्विसेज का SQL एजेंट जॉब स्टेप बनाना, सभी SET कमांड के माध्यम से रन-टाइम मान प्रदान करने की अनुमति देते हैं। . उपरोक्त चर का उपयोग करते हुए, निम्न आदेश रन-टाइम मान को C:\Test2.txt
पर सेट करेगा
dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"
कॉन्फ़िगरेशन
SSIS पैकेजों को रन-टाइम मान प्रदान करने के लिए कॉन्फ़िगरेशन स्रोत बनाने का विकल्प प्रदान करता है। ऊपर जो लेख मैंने लिंक किया है, वह कॉन्फ़िगरेशन विकल्पों के पेशेवरों और विपक्षों का वर्णन करने से कहीं बेहतर काम करता है, जो मैं यहां करूंगा। मैं कहूंगा कि मैं आम तौर पर दोनों का उपयोग करता हूं - मेरा एसईटी कमांड एक कनेक्शन प्रबंधक को कॉन्फ़िगर करता है जिसे पैकेज द्वारा पैकेज कॉन्फ़िगरेशन के "पूर्ण" सेट को खोजने के लिए उपयोग किया जाता है।
मान की गणना करना
एसएसआईएस में कई प्रकार के कार्य हैं जो एक चर के मूल्य के साथ-साथ एक मूल्य को बदलने के लिए अभिव्यक्तियों के उपयोग को भी बदल सकते हैं। मैं इन्हें ऐसी चीजों के रूप में देखता हूं जो पैकेज के उड़ान में होने पर मूल्य पर काम करती हैं।
कार्य
एक स्क्रिप्ट कार्य शुरू करने वालों के लिए सबसे अधिक उपयोग किए जाने वाले तंत्रों में से एक है, लेकिन मुझे एसएसआईएस टूलकिट में अन्य टूल्स मिलते हैं जो आमतौर पर परिवर्तनीय मानों को बदलने के लिए उपयुक्त होते हैं।
फॉरच लूप कंटेनर और SQL कार्य निष्पादित करें दो अन्य बड़े कार्य हैं जिन्हें आपको एक चर मान के असाइनमेंट के लिए देखना चाहिए।
अभिव्यक्ति
एसएसआईएस टूलबॉक्स में एक्सप्रेशन सबसे शानदार कैंडी हैं। एसएसआईएस में अधिकांश "चीज" कॉन्फ़िगरेशन के लिए गुणों को उजागर करती है। यह मददगार है, लेकिन उन गुणों को बनाने के लिए एक्सप्रेशन असाइन करने का उपयोग करना बकाया है।
उदाहरण के लिए, 3 चरों की कल्पना करें RootFolder
, FileName
और ComputedCurrentFile
C:\, File2.txt और खाली स्ट्रिंग के मानों के साथ। ComputedCurrentFile
. के लिए प्रॉपर्टी विंडो पर हम EvaluateAsExpression के मान को False से True में बदल देंगे और फिर @[User::RootFolder]+ "\\" [email protected][User::FileName]
यह केवल पहले दो चर के मूल्य को एक साथ जोड़ता है। यह मददगार हो सकता है यदि प्रसंस्करण के लिए फ़ाइल का नाम मानक था लेकिन स्रोत फ़ोल्डर अक्सर बदल जाता था। या यदि हम आउटपुट के बारे में बात कर रहे हैं, तो दिनांक और संभवतः पैकेज के चलने के समय का उपयोग करके आउटपुट फ़ाइल नाम बनाने के लिए एक्सप्रेशन का उपयोग करना आम बात है।
अंत में, ऐसा कुछ भी नहीं है जो इन दृष्टिकोणों के मिश्रण और मिलान को रोकता है। मैं आम तौर पर सही प्रारंभिक फ़ोल्डर में फ़ाइल एन्यूमरेटर को इंगित करने के लिए कॉन्फ़िगरेशन का उपयोग करता हूं और फिर प्रसंस्करण के लिए वर्तमान फ़ाइल की पहचान करने के लिए परिकलित मानों का उपयोग करता हूं।