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

chèn tệp XML trong SQL qua SSIS

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 SourceFolderCurrentFileName . 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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao đây là Quét lập chỉ mục mà không phải là Tìm kiếm chỉ mục?

  2. Hiệu suất chậm của SqlDataReader

  3. Di chuyển Cơ sở dữ liệu SQL Server sang Đám mây

  4. Làm cách nào để kết nối với MS SQL Server bằng cách sử dụng Inno Setup?

  5. Cách tạo câu lệnh bảng thả cho tất cả các bảng trong cơ sở dữ liệu - Hướng dẫn SQL Server / T-SQL Phần 48