Có hai cách tiếp cận khác nhau mà bạn có thể thực hiện.
Đầu tiên là như user569711 đã phác thảo và sử dụng ForEach Enumerator và gọi thủ tục được lưu trữ hiện có của bạn. Lợi thế của điều này là hành vi của bạn phải chính xác như những gì bạn hiện đang gặp phải và thử nghiệm của bạn chỉ cần tập trung vào việc đảm bảo gói SSIS đang chọn đúng tệp.
Thứ hai là sử dụng các khả năng bên ngoài của SSIS để đối phó với việc nhập các loại BLOB.
Luồng điều khiển
Bạn sẽ muốn xác định 1 đến 2 biến tùy thuộc vào cách tiếp cận của bạn. Cả hai sẽ là kiểu dữ liệu chuỗi. Tôi đã tạo SourceFolder
và CurrentFileName
. Trước đây xác định nơi các tệp sẽ đến và được sử dụng trong một trong hai cách tiếp cận. Cái sau được sử dụng trong ForEach Loop Container để nắm bắt tệp "hiện tại".
Luồng dữ liệu
Để làm cho luồng dữ liệu hoạt động, bạn sẽ cần có được danh sách tên tệp đủ điều kiện được thêm vào đường dẫn. Cách dễ nhất là sử dụng Chuyển đổi tập lệnh, đóng vai trò như một nguồn và bổ sung vào đó tất cả các tệp đáp ứng điều kiện của bạn (* .xml).
Vùng chứa vòng lặp Foreach
Định cấu hình như vậy
Bộ sưu tập
Ánh xạ biến
Thực thi tác vụ SQL
Định cấu hình như vậy
Nguồn tập lệnh
Tác vụ này sẽ thêm các tệp có sẵn vào luồng dữ liệu. Lưu ý nhỏ, điều này sẽ duyệt qua các thư mục con khác với cách chúng ta đã định cấu hình Foreach. Đó là một thay đổi đơn giản đối với tham số thứ ba (hoặc bỏ qua) để chỉ làm cho nó ở cấp cao nhất.
Xác định biến của bạn để biến có sẵn trong tác vụ tập lệnh
Thêm các cột đầu ra thích hợp. Độ dài của bạn có thể thay đổi tùy theo môi trường của bạn.
Tập lệnh ở đây
using System;
using System.Data;
using System.IO;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
public override void CreateNewOutputRows()
{
string fileMask = string.Empty;
string sourceFolder = string.Empty;
fileMask = @"*.xml";
sourceFolder = this.Variables.SourceFolder;
foreach (string fileName in Directory.GetFiles(sourceFolder, fileMask, SearchOption.AllDirectories))
{
Output0Buffer.AddRow();
Output0Buffer.FileName = fileName;
Output0Buffer.SourceName = "Dataflow";
}
}
}
Nhập chuyển đổi cột
Định cấu hình như thế này
Ghi lại ID tại đây
Buộc ID đó trở lại cột có tên
Đích đến của OLE DB
Định cấu hình. Không hỗ trợ tùy chọn Tải nhanh.
Tham khảo
Bài đăng rất hay về cách sử dụng Nhập Chuyển đổi Cột