كيف أحصل على تدفق بيانات SSIS لوضع "0.00" في ملف مسطح؟
-
01-10-2019 - |
سؤال
لديّ حزمة SSIS مع تدفق بيانات يأخذ مصدر بيانات ADO.NET (مجرد جدول صغير) ، ويقوم بتنفيذ استعلام SELECT * ، ويخرج نتائج الاستعلام إلى ملف مسطح (لقد حاولت أيضًا سحب الجدول بأكمله فقط وعدم استخدام SQL SELECT).
المشكلة هي أن مصدر البيانات يسحب عمودًا يمثل نوع بيانات أموال ، وإذا لم تكن القيمة صفرًا ، فإنها تأتي في الملف المسطح على ما يرام (مثل "123.45") ، ولكن عندما تكون القيمة صفرًا ، فإنها تظهر في الملف المسطح الوجهة باسم ".00". أحتاج إلى معرفة كيفية إعادة الصفر الرائدة إلى الملف المسطح.
لقد جربت العديد من أنواع البيانات للإخراج (في مدير اتصال الملفات المسطح) ، بما في ذلك العملة والسلسلة ، ولكن يبدو أن هذا ليس له أي تأثير.
لقد جربت بيان حالة في Select ، مثل هذا:
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
(نتائج '.00000000000000000')
هذه القضية الصغيرة السخيفة هي Killin 'Me. هل يمكن لأي شخص أن يخبرني كيف أحصل على قيمة قاعدة بيانات نوع بيانات الأموال في ملف مسطح كـ "0.00"؟
المحلول
هل يمكنك استخدام عمود مشتق لتغيير تنسيق القيمة؟ هل جربت ذلك؟
نصائح أخرى
كنت أواجه نفس المشكلة بالضبط ، وعملت إجابة سو بالنسبة لي. لقد أرسلت بياناتي إلى تحويل عمود مشتق (في صندوق أدوات تحويل تدفق البيانات). أضفت العمود المشتق كعمود جديد من سلسلة البيانات Unicode ([DT_WSTR]) ، واستخدمت التعبير التالي:
السعر <1؟ "0" + (DT_WSTR ، 6) السعر: (DT_WSTR ، 6) السعر
أتمنى أن يساعد ذلك!
لقد استخدمت المحرر المتقدم لتغيير العمود من double-precision float
إلى decimal
ثم اضبط Scale
إلى 2:
نظرًا لأنك تقوم بتصدير ملف نصي ، ما عليك سوى تصدير البيانات المسبقة.
يمكنك القيام بذلك في الاستعلام أو إنشاء عمود مشتق ، مهما كنت أكثر راحة.
اخترت جعل العمود 15 حرفًا واسعًا. إذا قمت بالاستيراد إلى نظام يتوقع أن يتم تجاهل أرقام تلك الأصفار ... فلماذا لا تقوم فقط بتوحيد طول الحقل؟
الحل البسيط في SQL هو كما يلي:
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 ، إلخ ..