2010-05-19 13 views
8

मेरे पास एक डेटा फ्लो के साथ एक एसएसआईएस पैकेज है जो एक ADO.NET डेटा स्रोत (केवल एक छोटी तालिका) लेता है, एक चयन * क्वेरी निष्पादित करता है, और क्वेरी परिणामों को एक फ्लैट फ़ाइल में आउटपुट करता है (मैंने बस खींचने की कोशिश की है पूरी तालिका और एक एसक्यूएल चयन का उपयोग नहीं)।एक फ्लैट फ़ाइल में '0.00' डालने के लिए मुझे एसएसआईएस डेटा प्रवाह कैसे प्राप्त होगा?

समस्या यह है कि डेटा स्रोत एक कॉलम खींचता है जो मनी डेटाटाइप है, और यदि मान शून्य नहीं है, तो यह टेक्स्ट फ्लैट फ़ाइल में ठीक है (जैसे '123.45'), लेकिन जब मान शून्य है , यह गंतव्य फ्लैट फ़ाइल में '.00' के रूप में दिखाई देता है। मुझे यह जानने की जरूरत है कि फ्लैट शून्य में अग्रणी शून्य वापस कैसे प्राप्त करें।

मैंने आउटपुट (फ्लैट फ़ाइल कनेक्शन मैनेजर में) के लिए विभिन्न डेटाटाइप की कोशिश की है, जिसमें मुद्रा और स्ट्रिंग भी शामिल है, लेकिन ऐसा कोई प्रभाव नहीं पड़ता है।

मैं अपने चयन में एक मामला बयान की कोशिश की है इस तरह,:

CASE WHEN columnValue = 0 THEN 
    '0.00' 
    ELSE 
     columnValue 
    END 

(अभी भी '.00' में जो परिणाम)

मैं इस तरह है कि में बदलाव की कोशिश की है:

CASE WHEN columnValue = 0 THEN 
    convert(decimal(12,2), '0.00') 
ELSE 
    convert(decimal(12,2), columnValue) 
END 

(फिर भी '.00' में जो परिणाम) और:

CASE WHEN columnValue = 0 THEN 
    convert(money, '0.00') 
ELSE 
    convert(money, columnValue) 
END 

यह मूर्खतापूर्ण थोड़ा मुद्दा ('.0000000000000000000' में परिणाम) मेरे killin है '। क्या कोई मुझे बता सकता है कि शून्य मनी डेटाटाइप डेटाबेस मान को एक फ्लैट फ़ाइल में '0.00' के रूप में कैसे प्राप्त किया जाए?

+0

मैं इस समस्या का कारण जानकर प्रसन्नता होगी - मैं वास्तव में नहीं हूँ व्युत्पन्न कॉलम हैक के साथ आरामदायक। – PeterX

उत्तर

9

क्या आप मूल्य के प्रारूप को बदलने के लिए व्युत्पन्न कॉलम का उपयोग कर सकते हैं? क्या आपने कोशिश की?

+0

यह एक अच्छा विचार है! मुझे कोशिश करें ... – theog

+0

ठीक है, कुछ कुश्ती के बाद (एक संख्यात्मक को एक स्ट्रिंग में परिवर्तित करने के लिए), जो काम करता है। बहुत धन्यवाद! – theog

8

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

मूल्य < 1? "0" + (DT_WSTR, 6) मूल्य: (DT_WSTR, 6) मूल्य

मुझे उम्मीद है कि इससे मदद मिलती है!

+0

धन्यवाद उपयोगकर्ता 346389 ... अजीब एसएसआईएस व्युत्पन्न कॉलम अभिव्यक्ति वाक्यविन्यास शामिल करना सहायक था। – theog

1

चूंकि आप टेक्स्ट फ़ाइल में निर्यात कर रहे हैं, बस डेटा preformatted निर्यात करें।

आप इसे क्वेरी में कर सकते हैं या व्युत्पन्न कॉलम बना सकते हैं, जो भी आप अधिक आरामदायक हैं।

मैंने 15 वर्णों को चौड़ा बनाने का चयन किया। यदि आप ऐसी प्रणाली में आयात करते हैं जो संख्याओं की अपेक्षा करता है तो उन शून्यों को अनदेखा किया जाना चाहिए ... तो क्यों न केवल क्षेत्र की लंबाई को मानकीकृत करें?

एसक्यूएल में एक सरल समाधान इस प्रकार है:

select 
    cast(0.00 as money) as col1 
    ,cast(0.00 as numeric(18,2)) as col2 
    ,right('000000000000000' + cast(0.00 as varchar(10)), 15) as col3 
    go 

col1     col2     col3 
--------------------- -------------------- --------------- 
       .0000     .00 000000000000.00 

बस '0.00' अपने स्तंभ नाम से प्रतिस्थापित और भूल जाओ TABLE_NAME से जोड़ने के लिए, आदि नहीं है ..

2

मैं उन्नत संपादक इस्तेमाल किया decimal को double-precision float से स्तंभ को बदलने के लिए और फिर सेट Scale 2 करने के लिए:

enter image description here

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