0

週の最初の日ごとに実行する必要がある SSIS パッケージがあります。ソースは Excel ファイルから、宛先は SQL テーブルです。

現在のプロセスは、Excel ファイルの null 値を手動で 0 に置き換えることです (時間がかかります)。そのため、パッケージを作成し、現在、派生列式 "(Column1 == "" ? 0 : Column1) で作業しています。 "、しかし、Excel ファイルの列は派生列の式と常に同じとは限らないため、パッケージを実行するたびに、派生列の式も編集する必要があります。これを行うためのより良い方法を探しており、手動で行うことを避けています。前もって感謝します。

4

2 に答える 2

1

SSIS で動的な列名を処理する簡単な組み込みの方法はまったくありません。派生列変換の式について心配することは言うまでもありません。

BiML を使用して、現在の列名に基づいてファイルをインポートする SSIS パッケージを動的に作成します。

GoogleBiML Tutorialが BiML の学習を開始します。幸運を祈ります。

于 2015-10-15T20:48:20.453 に答える
1

毎週 Excel ファイルを作成する担当者に、「20151005」ではなく「月曜日」「火曜日」「水曜日」「木曜日」「金曜日」の 5 つの列の名前を付けてもらうことができない場合は、 "20151006"、"20151007"、"20151008"、"20151009" (たとえば、先週適用されたもの) の場合は、次の手順で実行できます。

手順:

  1. SSIS パッケージに文字列型の新しいグローバル ユーザー変数を作成し、「Day」などの名前を付けます。
  2. 派生列の式で、たとえば「20151005」を新しいユーザー変数に置き換えます。上から下にドラッグすると、@[user::Day] のようになります。
  3. 新しい変数「Day」を動的に設定するには、次の SQL を単一行の ResultSet で実行する SQL スクリプトを追加します。左側の結果セットで、変数名列の下にユーザー変数「Day」を追加します。結果名に値「0」を指定します。[一般] で、[ソースの種類] を [直接入力] に設定し、前の週の月曜日の日付値を yyyymmdd 形式で返す次の SQL を指定します。

    declare @date as datetime 
    set @date = dateadd(week, datediff(week, 0, getdate()-7), 0) 
    select cast(year(@date) as char(4)) + right('00' + convert(varchar(2), month(@date)), 2) + right('00' + convert(varchar(2), day(@date)), 2)
    

ここで重要なのは、SSIS パッケージを次の週のいつでも実行でき、前の週の月曜日の情報が取得されることです。ただし、1 週間スキップすると、存在しない列を探します。月曜日の前週の日付を取得するために SQL スクリプトを適用する代わりに、ワークシートから最初の列を直接読み取ることですが、代わりに Visual Basic または C# を使用したスクリプト タスクを使用する必要があるため、これは複雑になります。エクセル参考。はるかに複雑ですが、実行できます。

お役に立てれば。

于 2015-10-15T22:19:17.677 に答える