Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để ánh xạ động các cột đầu vào và đầu ra trong SSIS?

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UNION kết quả của nhiều thủ tục được lưu trữ

  2. Tại sao điều chỉnh hiệu suất SQL là kỹ năng quản lý cơ sở dữ liệu quan trọng nhất cần có

  3. Biết khi nào cần thử lại hoặc không thành công khi gọi SQL Server từ C #?

  4. Thay đổi mật khẩu khi đăng nhập SA trong SQL Server (Ví dụ T-SQL)

  5. Làm cách nào để phát hiện truy vấn tạo, cập nhật, xóa thành công trong Codeigniter