0

私はこの手順を持っています

ALTER proc [dbo].[adenti] 
(
   @entra nvarchar(max)
)
as 
DECLARE @sql varchar(4000); 
SET @sql = 'INSERT INTO provaxml (arquivo) SELECT CAST(BulkColumn AS XML) FROM OPENROWSET(BULK ''' + @entra + ''', SINGLE_BLOB) as arquivo'; 
EXEC( @sql );

上記のコードは機能します。

Integration Servicesを使用して、パス内のすべての XML ファイルを SQL テーブルに挿入することはできますか?

4

1 に答える 1

12

実行できるアプローチは2つあります。

1つ目は、user569711の概要を示し、ForEach列挙子を使用して、既存のストアドプロシージャを呼び出します。これの利点は、動作が現在経験しているものとまったく同じである必要があり、テストはSSISパッケージが適切なファイルを取得していることを確認することにのみ焦点を当てる必要があることです。

2つ目は、SSISのすぐに使用できる機能を使用して、BLOBタイプのインポートを処理することです。

制御フロー

アプローチに応じて、1〜2個の変数を定義する必要があります。どちらも文字列データ型になります。作成SourceFolderしましCurrentFileNameた。前者は、ファイルの出所を定義し、どちらのアプローチでも使用されます。後者は、「現在の」ファイルをキャプチャするためにForEachループコンテナで使用されます。

制御フロー

データフロー

データフローを機能させるには、パイプラインに追加されたファイル名の完全修飾リストを取得する必要があります。最も簡単な方法は、スクリプト変換を使用してソースとして機能し、条件(* .xml)を満たすすべてのファイルを追加することです。

データフロー

Foreachループコンテナ

そのように構成する

コレクション

ここに画像の説明を入力してください

変数マッピング

ここに画像の説明を入力してください

SQLタスクの実行

このように構成します

ここに画像の説明を入力してください

ここに画像の説明を入力してください

スクリプトソース

このタスクは、利用可能なファイルをデータフローに追加します。マイナーな注意点として、これはForeachの構成方法とは異なるサブフォルダーをトラバースします。これは、3番目のパラメーター(または省略)を単純に変更して、トップレベルのみにすることです。

スクリプトタスクで使用できるように変数を特定します

ここに画像の説明を入力してください

適切な出力列を追加します。長さは環境によって異なる場合があります。

ここに画像の説明を入力してください

ここにスクリプト

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";
        }
    }
}

列変換のインポート

このように構成します

ここに画像の説明を入力してください

ここにIDをメモします

ここに画像の説明を入力してください

そのIDを名前の列に結び付けます

ここに画像の説明を入力してください

OLEDB変換先

構成、設定。高速ロードオプションをサポートしていません。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

参照

インポート列変換の使用に関するすばらしい投稿

于 2012-10-10T18:04:47.067 に答える