2016-06-23 11 views
1

値に基づいて製品の新しいデータを変更/挿入する要求があります。
現在、SSISを使用してヒープテーブルにデータを挿入しています。次に、ステータスに基づいてテーブルにレコードを移動する必要があります。
私は追加、更新、削除の3つのステータスがあります。
下記のステータスに基づいて挿入/更新クエリを作成する方法はありますか?ここで値に基づいて更新を挿入する

ロジックです:ステータス欄が追加含まれている場合

  • - 私は、製品テーブル
  • でこれらのレコードを挿入する必要がありStatus列は更新が含まれている場合 - 私は、Productsテーブル
  • に既に存在しているデータを更新する必要があります
  • ステータス]列が含まれている場合は削除する - 私は0

答えて

1

二つの選択肢に製品セットビットのActive列のデータを無効にする必要があります。

  1. 既存の行を更新し、新しい行を挿入するinsert文をフォローアップするための更新文を記述します。これは2つの操作で実行されますが、論理を完全に独立して維持することができます。
  2. merge演算子を使用すると、1回の操作で複数のアクションを実行できます。

ストアドプロシージャで1または2を折り返して、そのプロシージャをSSISから呼び出します。個人的には、例1のバージョンを使用しています。ここでは、挿入/更新コードは、upsertプロシージャが単に適切な順序で呼び出す個々にラップされたプロシージャです。これは例2よりもやや効率的ではありませんが、より柔軟でメンテナンス可能なパターンであることがわかりました(特にtable-valued parametersとペアになった場合)。

例1:

create procedure dbo.usp_MyTable_Upsert 
as 
begin; 
    update <Target> 
     set ... 
    from <Source> 
    join <Target> 
     on ...; 

    insert into <Target>(...) 
    select ... 
    from <Source> 
    where not exists (
       select 1 
       from <Target> 
       where ... 
     ); 
end; 

例2:

create procedure dbo.usp_MyTable_Upsert 
as 
begin; 
    merge <Target> 
    using <Source> 
     on ... 
    when matched then 
     update 
      set ... 
    when not matched by target then 
     insert ... 
    when not matched by source then 
     delete; 
end; 
+0

こんにちは。ご意見をいただきありがとうございます。いくつかの例を提供するために非常に親切ですか? – Key

+0

@SashaStecovych私は擬似コードを使用して2つの例を追加しました。これはあなたがしなければならないことの「形」を伝えることを意図しています。私が 'merge'で提供したリンクは、AdventureWorks2012データベースを使用したいくつかの実際の例を示しています。 – Kittoes0124

+0

私はMergeを使用することをお勧めします。より柔軟です。しかし、IFと同様、ELSEはアトミックな操作であることは保証されていません。 –

関連する問題