2010-06-24 37 views
5

Tôi đang sử dụng SSIS để chuyển đổi dữ liệu từ excel sang OLEDB SQL. Tôi có một tập hợp các trang tính trong một thư mục mà tôi sẽ phải lặp lại và chèn dữ liệu vào từng bảng này vào một bảng. Tôi có một kịch bản mà tôi phải lặp qua một tập hợp các bảng Excel có cấu trúc cột khác nhau. Tôi có thể lặp qua mỗi bảng thông qua điều tra vòng lặp foreach tìm tên tệp và chuyển chúng vào nguồn Excel.SSIS - ánh xạ cột động

Tôi muốn biết nếu có cách nào để thoát khỏi ánh xạ cột này trong thành phần đích sẽ là bảng SQL OLEDB trong trường hợp của tôi. Bởi vì các ánh xạ này khác nhau cho mỗi tệp. Có cách nào để làm điều này một cách năng động?

Trả lời

5

Trong khi bạn có thể thêm tác vụ tập lệnh bên trong vòng lặp để sửa đổi ánh xạ, nó không phải là điều dễ nhất để làm khi bạn phải tạo rõ ràng từng ánh xạ trong mã. Một giải pháp đơn giản hơn là thay thế các bảng excel bằng các tệp văn bản được phân cách và nhập chúng vào vòng lặp bằng cách sử dụng Tác vụ Chèn hàng loạt. Bạn sẽ không phải cung cấp bất kỳ thông tin bản đồ nào miễn là thứ tự cột giống nhau trong cả tệp và bảng.

Nếu bạn không thể làm điều đó, bạn sẽ lưu trữ siêu dữ liệu bản đồ ở đâu đó, ví dụ: một bảng trong cơ sở dữ liệu của bạn và sử dụng nó để tạo ánh xạ động trong một tác vụ Script.

Cách dễ dàng hơn một chút là chỉ sử dụng một tác vụ tập lệnh sử dụng siêu dữ liệu để định cấu hình đối tượng SqlBulkCopy. Bạn mất tính linh hoạt của một nhiệm vụ Dòng chảy dữ liệu đầy đủ nhưng nếu tất cả những gì bạn muốn là tải một số tệp trong talet tạm thời, thì điều đó là đủ tốt. Thêm vào đó, việc cấu hình một đối tượng SqlBulkCopy dễ dàng hơn nhiều so với một nhiệm vụ Data Flow.

+0

Làm cách nào để sử dụng tác vụ tập lệnh để định cấu hình đối tượng SQLBulkcopy? có một liên kết tôi có thể sử dụng? bạn có thể xin vui lòng được một chút briefer ... xin lỗi vì đã câm – Baaju

+3

Hãy thử tài liệu của lớp SqlBulkCopyColumnMapping tại http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopycolumnmapping.aspx cho một ví dụ sử dụng ánh xạ tùy chỉnh. Nó đơn giản như cung cấp một trình đọc nguồn (OleDbDataReader cho excel), kết nối đích và điền thuộc tính ColumnMappings của đối tượng SqlBulkCopy bằng cách sử dụng tên của cột nguồn và đích. Bạn thậm chí có thể để trống danh sách ColumnMappings, trong trường hợp này nó ánh xạ các cột theo vị trí thứ tự của chúng - cũng giống như Tác vụ Chèn Hàng loạt. –

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