你的浏览器还没开启 Javascript 功能!

少しデバッグが便利になるSQL ServerのOUTPUT句を紹介

自分への備忘録です。

SQL ServerのSP処理の一時テーブルの更新前後の結果を比較したいな~っと思ってぐぐったら、
OUTPUT句という便利なクエリを見つけました。

OUTPUT句とは

OUTPUT 句 (Transact-SQL) Microsoft公式リファレンス

使用例

百聞は一見に如かず、ごちゃごちゃ説明するよりまずはコードを見てみましょう。

UPDATE manager
  SET 
      manager.name = user.name
OUTPUT deleted.*, 
       inserted.*
FROM user
WHERE manager.id = user.id;
項目説明
DELETED更新(UPDATE)または削除(DELETE)で削除される値を指定する、UPDATE or DELETEのデータを取得可能
INSERTED挿入(INSERT)または更新(UPDATE)で追加される値を指定する、INSERT or UPDATEのデータを取得可能

ちょっと応用

更新前と更新後を取得できるってことは、exceptと組み合わせて更新前後の結果比較も可能ですね。

書いてみましたが、本当にSQLの使えるかどうかは微妙・・・

-- 更新後の値を入れるためのテーブル変数
DECLARE @after TABLE(CompanyName NVARCHAR(255));

-- 更新後の値を取得
UPDATE Customers
  SET 
      CompanyName = 'Alfreds Futterkiste'
OUTPUT inserted.CompanyName
       INTO @after
WHERE CustomerID = 'ALFKI';

-- 更新後、想定結果と比較する
SELECT CASE COUNT(*)
           WHEN 0
           THEN 'OK'
           ELSE 'NG'
       END
FROM
(
    SELECT 'Alfreds Futterkiste' AS CompanyName
    EXCEPT
    SELECT CompanyName
    FROM @after
) AS t1;

まとめ

SQL Serverのリモートデバッグできない環境でPRINTだけでなく、
OUTPUT句を組み合わせることで少し効率的に開発できます。今後のプロジェクトで生かしてみよっと!

あぁ、それにしても自分はSQLは得意じゃないな…_| ̄|○