2012-02-02 3 views
1

あるテーブルの内容を別のテーブルに変換するストアドプロシージャを作成しようとしていますが、どこから始めるべきかわかりません。私のシナリオでは、[Source]、[Type_A]、[Type_B] & [Destination]の4つのテーブルがあります。複数のソーステーブルのデータを単一のデスティネーションテーブルにマージする

[ソース]には、[デスティネーション]に値を引き継ぐ必要がある2つの列があります。 [ソース]の列の1つが「型」(識別子)です。

"type"が0の場合は、[Type_A] &の列のサブセットを[Destination]に追加して静的な値を追加する必要があります。いくつか異なる静的な値を持つ

「タイプ」が1であれば、私は[TYPE_B]から列のサブセットを引っ張っする必要が& [先]にレコードを追加を追加しました。

このストアドプロシージャの実行ごとに処理される可変数のレコードがあります。このレコードは、ユーザーによってASP.NETアプリケーションから呼び出されます。

私はSQLで相対newbですので、解決策が単純なものであれば私を許してください。私はこれをコード(C#)で繰り返し実行できることを知っていますが、むしろ複数のDB呼び出しのオーバーヘッドを避けたいと考えています&は、トランザクション内のすべてのものをラップしたいと思います。

これをどのように実現できるかについて誰かが明らかにすれば、本当に感謝しています。

ありがとうございます!

答えて

2

あなたがソース、TYPE_AとTYPE_B間の関係を持っていると仮定すると:

INSERT INTO Destination 
    (Col1, Col2, Col3, Col4, Col5) 
    SELECT s.Col1, 
      s.type, 
      /* The next two columns illustrate choosing a */ 
      /* subset from either Type_A or Type_B   */ 
      COALESCE(a.Col3, b.Col3), 
      COALESCE(a.Col4, b.Col4), 
      /* The next column illustrates choosing a  */ 
      /* static value based on Source.type   */ 
      CASE WHEN s.type = 0 THEN 'Static Value 1' 
       WHEN s.type = 1 THEN 'Static Value 2' 
       ELSE NULL 
      END /* CASE */ 
     FROM Source s 
      LEFT JOIN Type_A a 
       ON s.Col1 = a.Col1 
        AND s.type = 0 
      LEFT JOIN Type_B b 
       ON s.Col1 = b.Col1 
        AND s.type = 1 
+0

私は私が必要な方法を引っ張って、すべてを取得するには、この少しを微調整する必要がありますするつもりですが、これは非常に便利です!素晴らしいもの!ありがとうジョー! – Mysterei

関連する問題