2016-04-22 11 views
0

テーブル "A"のすべての行をループするストアドプロシージャの最良の方法&テーブル "B"にレコードが存在するかどうかを確認&結果にテーブル「B」に「挿入」または「更新」を実行する(表Bに見られるかどうか)。例えばテーブルBのSQLループスルーテーブルAと挿入/更新

//LOOP START 
    //if ID Exists in Table B. 
     //Take current row table a values and update table "B" 
    Else 
     //Take current row table a values and insert into table "B" 
//LOOP END 

おかげ

+1

にINTOコマンドMERGEを使用することは、可能な限り集合演算の賛成で*ループ*忘れることを学びます。ループは本質的に遅く、DBMSエンジンはセットで動作するように最適化されています。ループ操作(AKAカーソル操作)は、セット操作を実行する方法がまったくない場合の最後の手段です。 –

+0

は、このような簡単な言葉でそれを説明するために、あなたのケンホワイトありがとうございます。あなたの努力を感謝します。 Upvoted。 – Robin

答えて

2

は、SQL 2008

MERGE INTO table_B as Target 
USING (
    Select 
     Id, Field1, Field2 
    FROM table_A) as Source 
ON Source.Id = Target.Id 
WHEN NOT MATCHED THEN 
    INSERT(Id, Field1, Field2) 
    VALUES(Source.Id, Source.Field1, Source.Field2) 
WHEN MATCHED THEN 
    UPDATE 
    SET 
     target.Id = Source.Id 
     ,target.Field1 = Source.Field1 
     ,target.Field2 = Source.Field2 
; 
+0

J Greeneありがとう、これは魅力的です。答えとしてマーク。 – Robin

関連する問題