2009-02-16 37 views
13

Tôi có gói SSIS để tải dữ liệu; như bạn có thể nhớ lại có những lá cờ có trong các tập tin dữ liệu như Y/N char (1) khi tôi đang cố gắng để tải chúng như bit cờ vào SQL Server. Tôi chỉ định các cột trong tệp dữ liệu là String [DT_STR] và tôi có nhiệm vụ chuyển đổi dữ liệu để chuyển đổi chúng sang booleans dựa trên biểu thức sau (tôi nhận được lỗi chuyển đổi giống như chỉ định DT_BOOL bắt đầu, mặc dù SSIS yêu cầu tôi nói những giá trị nào đó nên xem xét như boolean):SSIS Chuyển đổi một char thành boolean/bit

[ColumnName] == "Y" ? (DT_BOOL)1 : (DT_BOOL)0 

Chạy gói cho một lỗi và nói với tôi Invalid character value for cast specificationThe value could not be converted because of a potential loss of data về việc nhập khẩu thực tế để SQL server (thông qua một Destination OLE DB).

Tôi thiếu gì ở đây để chuyển đổi đúng cách?

+0

Tôi đã xem xét thực hiện điều gì đó * cực kỳ * tương tự như vậy, nhưng tôi không thể tìm thấy bất kỳ nơi nào trong chuyển đổi Chuyển đổi dữ liệu để thực hiện điều đó. Ở đâu mà bạn đang xác định điều này? –

+1

Tôi tin rằng tôi đã tìm thấy nó - đó thực sự là biến đổi Cột có nguồn gốc. –

Trả lời

11

tôi đã có thể giải quyết nó bằng cách sử dụng một cột có nguồn gốc và, thay vì thay thế các cột char, tạo cột mới thiết lập để loại DT_BOOL như vậy:

[Recycled] == "Y" ? True : False 
+1

Xin lỗi, tôi hiểu lầm, bạn không thể thay thế bất kỳ cột nào trong SSIS bằng một cột thuộc loại khác, bạn luôn phải thêm cột mới. –

+1

Mặc dù trong nhiệm vụ chuyển đổi, bạn có thể tạo một cột khác có cùng tên, nhưng theo kinh nghiệm của tôi, không phải tất cả các thành phần trong đường dẫn sẽ hiển thị tên đầy đủ như component.column, vì vậy nó gây phiền nhiễu và nguy hiểm. –

+0

Right - Tôi thấy rằng cách cứng ;-) –

17

Hãy thử điều này:

(DT_BOOL)([ColumnName] == "Y" ? 1 : 0) 

này cũng có lợi thế là tự động thiết lập các kiểu dữ liệu của cột có nguồn gốc một cách chính xác.

0

tôi đã cùng một vấn đề với

(DT_BOOL) ([Tên cột] == ​​"Y"? 1: 0)

và tôi chỉ có thể làm cho nó hoạt động bằng cách lấy PHẦN "(DT_BOOL)" ra khỏi biểu thức và đặt công việc chuyển nó thành boolean vào phần "Data Type" bằng cách chọn "Boolean [DT_BOOL]. Không có vấn đề gì sau đó.

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