2

今日、クライアントが次のように尋ねる新しい状況があります。

フォルダーに XML ファイルがあります。これらのファイルを SQL Server テーブル列 (XML データ型) にロードする必要があります。XML 出力をさまざまな SQL Server テーブルにロードするのではなく、XML ファイル自体を SQL Server データベースの XML データ型を持つ列にロードします。

これは、クライアントの要件に従って、SSISでのみ行う必要があります。したがって、この方法で Execute SQL Task を使用します。(XML ファイルとは別に、、、などが必要ですImportDateFileName)

接続の種類は OLE DB です。私が持っているSQLステートメントは次のとおりです。

INSERT INTO dbo.tablename (IncomingXMLfile, ImportDate)
-- I am using just 2 columns as an example for this table--
SELECT  CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE() 
FROM OPENROWSET(BULK 'C:\Mic\...........\API_Schemas\ABC.xml', SINGLE_BLOB) AS x;

これは、ファイルを 1 つだけハードコードする場合にうまく機能します。さて、C:\Mic\...\API_Schemasフォルダーには多くの XML ファイルがあり、それぞれをロードする必要があります。それとは別に、それらのファイル ( ImportDate. GETDATE()INSERT ステートメント)。ForEachLoop コンテナーを使用し、SQL 実行タスクをこのコンテナー内に配置する必要があります。

したがって、この問題には 2 つの側面があります。

  1. SQL 実行タスク内でファイル名をパラメータ化します。

  2. ForEachLoop コンテナーを使用して (およびこの SQL 実行タスクを内部に配置して)、フォルダー内の各 XML ファイルを実行します。

Filename(string datatype)という名前のユーザー変数を使用します。この値ABC.xmlには (フォルダー内の一連の XML ファイルの最初のファイル); 上記の TSQL クエリを次のようにパラメーター化します (以下を参照)。

INSERT INTO dbo.tablename (IncomingXMLfile, ImportDate)
SELECT  CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE() 
FROM OPENROWSET(BULK 'C:\Mic\...........\API_Schemas\?', SINGLE_BLOB) AS x;

このパラメーター ( ) を、この Execute SQL Task (タブ)?のユーザー変数 Filenameにマップします。ParameterMappingクエリは SQL 実行タスクで正しく解析されました! ただし、この SQL タスクを実行すると、次のエラーが発生します。

「パラメータ名が認識されません。」. 考えられる失敗の理由: クエリの問題、「ResultSet」プロパティが正しく設定されていない、パラメーターが正しく設定されていない、または接続が正しく確立されていない。

この状況は、XML ファイルから (データ アクセス モード (変数からの XML データ) などを使用して XML ソース エディターを使用して) SQL Server テーブルにデータを読み込む場合とはかなり異なります。この場合、XML ファイル自体を XML データ型を持つ SQL Server テーブル COLUMN にロードし、フォルダーからロードされたさまざまな XML ファイルに関する情報を取得します。その結果、変数を使用してこのパッケージを実行する方法がわかりません。

  • ファイル名を正しくパラメータ化する方法について、まず誰かが私を助けることができますか?

  • 後で、フォルダーから各ファイルを読み取るように ForEachLoop コンテナーを構成する方法を教えてください。

このシナリオでユーザー変数を使用する方法について混乱しています。

4

1 に答える 1