SQL Server 2008 で多くの行をテーブルにアップサートする方法が 2 つあります。
そのうちの 1 つがここにありますhttp://technet.microsoft.com/en-us/library/bb522522(v=sql.105).aspxは、一時テーブルを作成し、一時テーブルに値を挿入し、最後にそれをマージするように言いますターゲットができるテーブル。
テーブルを作成し、テーブルに入力し、ターゲット テーブルにマージしてから、一時テーブルを削除する必要があるため、これはあまり効率的ではないように思えます。
私が考えることができる唯一の他のことは次のとおりです...
MERGE dbo.targettable as tgt
USING (
SELECT 12 as col1, 13 as col2, 'abc' as col3, 'zyx' as col4
UNION ALL
SELECT 11 as col1, 11 as col2, 'def' as col3, 'def' as col4
(etc etc)
UNION ALL
SELECT 7 as col1, 10 as col2, 'jfj' as col3, 'tub' as col4)
as new
ON tgt.col1=new.col1
WHEN MATCHED THEN UPDATE SET tgt.col2=new.col2, tgt.col3=new.col3, tgt.col4=new.col4
WHEN NOT MATCHED THEN INSERT (col1, col2, col3, col4)
VALUES(new.col1, new.col2, new.col3, new.col4);
usr の回答に基づいて、http://msdn.microsoft.com/en-us/library/bb510625.aspxを見つけることができました
これがやり方だと思います。この構文が正しいように見えることを誰かが確認できますか?
MERGE dbo.targettable as tgt
USING (VALUES(12, 13, 'abc', 'zyx'), (11, 11, 'def', 'def'),(7, 10, 'jfj', 'tub'))
AS new (col1, col2, col3, col4)
ON tgt.col1=new.col1
WHEN MATCHED THEN UPDATE SET tgt.col2=new.col2, tgt.col3=new.col3, tgt.col4=new.col4
WHEN NOT MATCHED THEN INSERT (col1, col2, col3, col4)
VALUES(new.col1, new.col2, new.col3, new.col4);