Nhập một cột lớn (8000 ký tự) từ Excel bằng SSIS


7

Tôi đang cố gắng thiết lập nhập thường xuyên bảng tính excel mà chúng tôi nhận được từ nhà cung cấp. Tôi đang sử dụng SQL 2008 R2 SSIS để nhập nó vào bảng. Trình quản lý kết nối sự cố là kết nối OLE DB với bảng tính. Bảng tính là Excel 2005. Trình quản lý kết nối cơ sở dữ liệu đang sử dụng Máy khách gốc OLE DB \ SQL.

Vấn đề tôi gặp phải là Nguồn OLE DB tiếp tục đặt một vài cột excel DT_WSTR255độ dài. Tôi có 2 cột tuy nhiên lần lượt là 4000 và 8000 ký tự. Tôi đã đi vào tab Advanced Editor/ Input and Output Propertiescho Nguồn OLE DB và thay đổi Kiểu dữ liệu / Độ dài trong External Columnsdanh sách và Output Columnsdanh sách. Thật không may khi tôi để lại Advanced Editormột lỗi xuất hiện trong danh sách lỗi.

Validation error. Data Flow Task: Data Flow Task: The output column "ColumnName" (226)
on the error output has properties that do not match the properties of its 
corresponding data source column.

Khi tôi nhấp vào Nguồn một lần nữa, tôi nhận được một tùy chọn để "sửa" các lỗi tự động. Sau đó tôi chọn "có" và "ok". Lỗi bây giờ không còn nữa nhưng khi tôi quay lại External Columnscài đặt kiểu dữ liệu / độ dài thì trở lại ban đầu DT_WSTR/255.

Tôi có thể tự thay đổi bảng tính thành một tệp được phân tách để tránh sự cố nhưng không muốn thêm một bước thủ công vào quy trình. Có ai biết cách lấy nguồn Excel để cho phép một cột dài không?


bạn đang sử dụng thành phần Chuyển đổi dữ liệu?
Kin Shah

1
Có phải nó chỉ lỗi khi thay đổi độ dài của cột 8k hoặc nó xảy ra với cả định nghĩa 8 và 4k? Bạn có mở các phương pháp đọc dữ liệu Excel khác với SSIS bên cạnh Trình quản lý kết nối Excel không?
billinkc

@Kin, tôi không nhận được thành phần chuyển đổi dữ liệu. Tôi có một liên kết cho các hàng không thành công gửi bất kỳ thứ gì trên 255 ký tự (lỗi cắt ngắn) vào một bảng tính riêng. Tôi đang sử dụng một thành phần chuyển đổi dữ liệu sau để thay đổi từ DT_WSTRtới DT_STRnhưng hiện tại cho những hàng tôi không thể có được điều đó đến nay.
Kenneth Fisher

@billinkc Lỗi xảy ra khi tôi thay đổi giá trị thành bất kỳ thứ gì ngoài 255 ký tự gốc. Tôi rất vui khi sử dụng một cái gì đó ngoài trình quản lý kết nối Excel. Yêu cầu duy nhất của tôi tại thời điểm này là nó là một quy trình tự động mà tôi có thể giải thích cho các nhà phát triển của mình để họ có thể hỗ trợ.
Kenneth Fisher

Câu trả lời:


5

Cuối cùng chúng tôi đã giải quyết vấn đề. Hóa ra SSIS tính toán độ dài dựa trên số hàng đầu tiên trong tệp excel. Khi chúng tôi di chuyển các hàng có dữ liệu dài hơn lên trên cùng, các cột được thay đổi thành văn bản unicode (cho phép thêm độ dài).


0

bạn có thể chia một văn bản lớn thành các đoạn nhỏ hơn, trong các hàng và tải chúng vào thùng chứa vòng lặp foreach,

Declare @maxRowLength int = 50;
with x as (
select 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry''s standard dummy text ever since the 1500s. Over the years, sometimes by accident, sometimes on purpose (injected humour and the like).' data
),
tmp(data,c,rn) as (
select data,SUBSTRING(data, 1,@maxRowLength),@maxRowLength
from x
union all
select data,SUBSTRING(data,rn,@maxRowLength),rn + @maxRowLength
from tmp
where rn < len(data)
)
select c,rn from tmp
OPTION (MAXRECURSION 500);

thêm thông tin đăng ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.