2010-05-19 25 views
8

Tôi có một gói SSIS với luồng dữ liệu lấy nguồn dữ liệu ADO.NET (chỉ một bảng nhỏ), thực hiện truy vấn chọn * và xuất kết quả truy vấn sang tệp phẳng (tôi cũng đã cố gắng kéo toàn bộ bảng và không sử dụng một lựa chọn SQL).Làm cách nào để nhận Luồng dữ liệu SSIS để đặt '0,00' trong tệp phẳng?

Vấn đề là nguồn dữ liệu kéo cột là kiểu dữ liệu tiền, và nếu giá trị không bằng 0, nó đi vào tệp phẳng văn bản tốt (như '123.45'), nhưng khi giá trị bằng 0 , nó hiển thị trong tệp đích đích là '.00'. Tôi cần phải biết làm thế nào để có được số 0 dẫn đầu vào tập tin phẳng.

Tôi đã thử nhiều kiểu dữ liệu khác nhau cho đầu ra (trong Trình quản lý kết nối tệp phẳng), bao gồm tiền tệ và chuỗi, nhưng điều này dường như không có hiệu lực.

Tôi đã thử một tuyên bố trường hợp trong chọn của tôi, như thế này:

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

(kết quả vẫn' .00')

Tôi đã thử các biến thể trên đó như thế này:

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

(Tuy nhiên kết quả trong' .00')

và:

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

(kết quả trong' ,0000000000000000000 ')

vấn đề chút ngớ ngẩn Đây là Killin' tôi. Ai có thể cho tôi biết làm thế nào để có được một số tiền không có giá trị cơ sở dữ liệu datatype vào một tập tin phẳng là '0.00'?

+0

Tôi rất muốn biết nguyên nhân của vấn đề này - Tôi không thực sự thoải mái với bản hack cột có nguồn gốc. – PeterX

Trả lời

9

Bạn có thể sử dụng Cột có nguồn gốc để thay đổi định dạng của giá trị không? Bạn đã thử điều đó chưa?

+0

Đó là một ý tưởng tuyệt vời! Hãy để tôi thử điều đó ... – theog

+0

Được rồi, sau một chút đấu vật (để chuyển đổi một số thành một chuỗi), điều đó đã hiệu quả. Cảm ơn Soo! – theog

8

Tôi gặp vấn đề tương tự chính xác và câu trả lời của soo có hiệu quả đối với tôi. Tôi đã gửi dữ liệu của tôi vào một biến đổi cột có nguồn gốc (trong hộp công cụ chuyển đổi luồng dữ liệu). Tôi đã thêm cột có nguồn gốc làm cột mới của kiểu dữ liệu Chuỗi Unicode ([DT_WSTR]) và sử dụng cụm từ sau:

Giá < 1? "0" + (DT_WSTR, 6) Giá: (DT_WSTR, 6) Giá

Tôi hy vọng điều đó sẽ hữu ích!

+0

Cảm ơn user346389 ... việc bao gồm cú pháp biểu thức cột có nguồn gốc SSIS lạ là hữu ích. – theog

1

Vì bạn đang xuất sang tệp văn bản, chỉ xuất dữ liệu được định dạng sẵn.

Bạn có thể làm điều đó trong truy vấn hoặc tạo cột có nguồn gốc, bất kỳ điều gì bạn thấy thoải mái hơn.

Tôi đã chọn làm cho cột rộng 15 ký tự. Nếu bạn nhập vào một hệ thống mà dự kiến ​​con số những số không nên bỏ qua ... vậy tại sao không chỉ tiêu chuẩn hóa độ dài trường?

Một giải pháp đơn giản trong SQL như sau:

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 

Đơn giản chỉ cần thay thế '0.00' bằng tên cột của bạn và đừng quên để thêm FROM tên_bảng, vv ..

2

tôi đã sử dụng biên tập viên cao cấp để thay đổi cột double-precision float-decimal và sau đó thiết lập các Scale 2:

enter image description here

Các vấn đề liên quan