Nếu bạn tạo một bảng tương tự, bạn có thể sử dụng bảng này theo 2 cách tiếp cận để ánh xạ động các cột bên trong gói SSIS hoặc bạn phải xây dựng toàn bộ gói theo chương trình. Trong câu trả lời này, tôi sẽ cố gắng cung cấp cho bạn một số thông tin chi tiết về cách thực hiện điều đó.
(1) Xây dựng lệnh SQL nguồn với bí danh
Lưu ý:Phương pháp này sẽ chỉ hoạt động nếu tất cả các tệp .dbf có cùng số cột nhưng tên khác nhau
Trong cách tiếp cận này, bạn sẽ tạo lệnh SQL sẽ được sử dụng làm nguồn dựa trên FileID và bảng Ánh xạ bạn đã tạo. Bạn phải biết là FileID và Đường dẫn tệp .dbf được lưu trữ bên trong một Biến. như ví dụ:
Giả sử rằng tên Bảng là inputoutputMapping
Thêm một tác vụ SQL thực thi bằng lệnh sau:
DECLARE @strQuery as VARCHAR(4000)
SET @strQuery = 'SELECT '
SELECT @strQuery = @strQuery + '[' + InputColumn + '] as [' + OutputColumn + '],'
FROM inputoutputMapping
WHERE FileID = ?
SET @strQuery = SUBSTRING(@strQuery,1,LEN(@strQuery) - 1) + ' FROM ' + CAST(? as Varchar(500))
SELECT @strQuery
Và trong Tab ánh xạ tham số, hãy chọn biến có chứa FileID sẽ được ánh xạ thành tham số 0
và biến chứa tên tệp .dbf (thay thế cho tên bảng) cho tham số 1
Đặt loại ResultSet thành Single Row
và lưu trữ ResultSet 0
bên trong một biến kiểu chuỗi như ví dụ @[User::SourceQuery]
Giá trị ResultSet sẽ như sau:
SELECT [CustCd] as [CustCode],[CNAME] as [CustName],[Address] as [CustAdd] FROM database1
Trong OLEDB Source
chọn Chế độ truy cập bảng thành Lệnh SQL từ Biến và sử dụng @[User::SourceQuery]
biến dưới dạng nguồn.
(2) Sử dụng Thành phần Tập lệnh làm Nguồn
Trong cách tiếp cận này, bạn phải sử dụng Thành phần tập lệnh làm Nguồn bên trong Tác vụ luồng dữ liệu:
Trước hết, bạn cần chuyển đường dẫn tệp .dbf và kết nối SQL Server tới thành phần tập lệnh thông qua các biến nếu bạn không muốn viết mã khó cho chúng.
Bên trong trình chỉnh sửa tập lệnh, bạn phải thêm một cột đầu ra cho mỗi cột được tìm thấy trong bảng đích và ánh xạ chúng tới đích .
Bên trong Tập lệnh, bạn phải đọc tệp .dbf thành một tệp dữ liệu:
- C # Đọc từ các tệp .DBF thành một tệp dữ liệu
- Tải DBF vào DataTable
Sau khi tải dữ liệu vào một cơ sở dữ liệu, cũng điền vào một cơ sở dữ liệu khác với dữ liệu được tìm thấy trong MappingTable mà bạn đã tạo trong SQL Server.
Sau vòng lặp đó trên các cột có thể dữ liệu và thay đổi .ColumnName
vào cột đầu ra có liên quan, chẳng hạn như:
foreach (DataColumn col in myTable.Columns)
{
col.ColumnName = MappingTable.AsEnumerable().Where(x => x.FileID = 1 && x.InputColumn = col.ColumnName).Select(y => y.OutputColumn).First();
}
Sau khi lặp qua từng hàng trong lập trình dữ liệu và tạo một hàng đầu ra tập lệnh.
Ngoài ra, lưu ý rằng trong khi gán các hàng đầu ra, bạn phải kiểm tra xem cột có tồn tại hay không, trước tiên bạn có thể thêm tất cả các tên cột vào danh sách chuỗi, sau đó sử dụng nó để kiểm tra, ví dụ:
var columnNames = myTable.Columns.Cast<DataColumn>()
.Select(x => x.ColumnName)
.ToList();
foreach (DataColumn row in myTable.Rows){
if(columnNames.contains("CustCode"){
OutputBuffer0.CustCode = row("CustCode");
}else{
OutputBuffer0.CustCode_IsNull = True
}
//continue checking all other columns
}
Nếu bạn cần thêm chi tiết về việc sử dụng Thành phần Tập lệnh làm nguồn, hãy kiểm tra một trong các liên kết sau:
- Thành phần tập lệnh SSIS dưới dạng nguồn
- Tạo nguồn bằng Thành phần tập lệnh
- Thành phần tập lệnh dưới dạng nguồn - SSIS
- SSIS - SỬ DỤNG THÀNH PHẦN SCRIPT LÀM NGUỒN GỐC
(3) Xây dựng gói một cách động
Tôi không nghĩ rằng có các phương pháp khác mà bạn có thể sử dụng để đạt được mục tiêu này ngoại trừ việc bạn có lựa chọn để xây dựng gói một cách động, thì bạn nên sử dụng:
- BIML
- Mô hình đối tượng được quản lý Dịch vụ Tích hợp
- Thư viện EzApi
(4) SchemaMapper:Thư viện lớp ánh xạ lược đồ C #
Gần đây, tôi đã bắt đầu một dự án mới trên Git-Hub, đây là một thư viện lớp được phát triển bằng C #. Bạn có thể sử dụng nó để nhập dữ liệu dạng bảng từ excel, word, powerpoint, text, csv, html, json và xml vào bảng máy chủ SQL với định nghĩa giản đồ khác bằng cách sử dụng phương pháp ánh xạ lược đồ. kiểm tra nó tại:
- SchemaMapper:Thư viện lớp ánh xạ lược đồ C #
Bạn có thể theo dõi trang Wiki này để biết hướng dẫn từng bước:
- Nhập dữ liệu từ nhiều tệp vào một bảng SQL hướng dẫn từng bước