5

下の画像でわかるように、フラットファイルソースを介して入力しているSQLServerのテーブルがあります。以下にリストされているロジックに基づいて更新したい宛先テーブルに2つの列があります。

  • SessionID-最初のCSVインポートからのすべての行の値は1になります。2番目のインポートの値は2になり、以下同様に続きます。
  • TimeCreated-CSVインポートが行われた日時の値。

これを行うためにTSQLコードを作成する方法についてのヘルプは必要ありません。代わりに、SSIS内のデータフロータスクとしてこれを実装する方法を誰かに提案してもらいたいと思います。

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

よろしくお願いします。

2012年11月29日編集

これまでのすべての回答はSQLServer側でこれを処理することを示唆していたので、最初に試したことを示したかったのですが(下の画像を参照)、うまくいきませんでした。SSISがデータを宛先テーブルに挿入した後、SQLServerでトリガーが起動しませんでした。

トリガーが起動しなかった理由を説明できる人がいれば、それは素晴らしいことです。

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

4

3 に答える 3

6

宛先テーブルを変更できる場合は、SessionIDとTimeCreatedのデフォルト値ですべての作業を行うことができます。SessionIDは自動増分整数ですが、TimeCreatedのデフォルト値はデータ型に応じてgetdate()またはgettime()になります。

これで、ワークフローの一部として作成する値が本当に必要な場合は、それぞれに変数を使用できます。

SessionIDは、SQL実行タスクによって設定されるパッケージ変数になります。結果セット内の変数を参照し、SQLに次に使用する数値を決定させるだけです。ただし、これには潜在的な同時実行の問題があります。

TimeCreatedは、システム変数StartTimeに基づいてデータフローに派生列を作成することで簡単に実行できます。

于 2012-11-28T23:46:31.393 に答える
3

派生列を使用して列を埋めることができますTimeCreated。データフローの時刻が必要な場合は、日付と時刻の関数を使用して現在の日時を取得するだけです。パッケージ全体(すべてのファイル)に共通のタイムスタンプが必要な場合は、システム変数@[System::StartTime](またはそれが呼ばれたもの)を使用できます。

CSVループ(おそらく)の場合、foreachループコンテナーを使用し、SessionID上記のように派生列にマップするユーザー変数に反復値をマップします。

于 2012-11-28T23:46:16.387 に答える
-1

まず、SQL Server側で実行する方がよいでしょう:)
しかし、サーバー側で実行したくない、または実行できない場合は、次のアプローチを使用できます。

SessionIDをどこかに保存する必要があることは明らかです。そのためのtxtファイルを作成できるか、SQLServerの設定テーブルを作成するか他の方法があります。

SessionID列を追加しTimeCreatedてOLE宛先に追加するには、派生列を使用できます

于 2012-11-28T23:40:34.470 に答える