『質問に答えてみた』に内容を追加してみた
会議中に少しだけ。下記の記事内容に少し補足します。
ryuchan.hatenablog.com
MERGE 文でどのように更新および追加したかを判断する方法です。MERGE 文に OUTPUT $action, Inserted.*,Deleted.* を追加します。また、結果を格納するレイアウトとして下記の一時テーブルを用意します。
CREATE TABLE #Result ( action NVARCHAR ( 32 ), -- 動作を格納(INSERT,UPDATE,DELETE) col1 INT NOT NULL, -- 今回更新された col1 の内容 col2 INT NOT NULL, -- 今回更新された col2 の内容 col3 NVARCHAR ( 256 ), -- 今回更新された col3 の内容 prev_col1 INT, -- 更新前の col1 の内容 prev_col2 INT, -- 更新前の col2 の内容 prev_col3 NVARCHAR ( 256 ) -- 更新前の col3 の内容 );
それでは、下記のクエリを SQL Server Management Studio で実行してみましょう。
CREATE TABLE #Result ( action NVARCHAR ( 32 ), -- 動作を格納(INSERT,UPDATE,DELETE) col1 INT NOT NULL, -- 今回更新された col1 の内容 col2 INT NOT NULL, -- 今回更新された col2 の内容 col3 NVARCHAR ( 256 ), -- 今回更新された col3 の内容 prev_col1 INT, -- 更新前の col1 の内容 prev_col2 INT, -- 更新前の col2 の内容 prev_col3 NVARCHAR ( 256 ) -- 更新前の col3 の内容 ); SELECT col1, col2, col3 INTO #Temp_Table FROM Real_Table1; MERGE INTO #Temp_Table t1 USING Real_Table2 t2 ON t2.col2 = t1.col2 WHEN MATCHED THEN UPDATE SET t1.col3 = t2.col3 WHEN NOT MATCHED THEN INSERT VALUES ( t2.col1, t2.col2, t2.col3 ) OUTPUT $action, Inserted.*,Deleted.* INTO #Result; SELECT * FROM #Result
基礎から学んでみるかな。
- 作者: 松本美穂,松本崇博
- 出版社/メーカー: ソシム
- 発売日: 2016/07/26
- メディア: 単行本
- この商品を含むブログを見る