2008年1月18日金曜日

OUTPUT句を利用するのが難しい・・・

SqlServer2005の新機能で非常に便利な機能なOUTPUT句による更新結果の取得と返却。

現在進行中で困っているんだけども、何となくこういった理由でVisualStudioはOUTPUT句を使った更新後データの取得を行っていないんじゃないかな、ってのが。

それはトリガの存在。

トリガが存在するテーブルに対してOUTPUT句を利用する場合、必ずINTOも付与して結果を収納する変数を指定する必要があるんだよね。
(例外として、トランザクションでなければ大丈夫、というのはある・・・らしいけどManagementStudioでダイレクトに実行してもダメだったからMSDNの記載が違っているような気もする。読み違いの可能性は非常に高いけどw)

それで厄介なのはINTOで結果を変数に収納するということは、一つのINSERTなりUPDATEを実行するために、こんな感じのSQLにならないといけなくなるってことで。

 BEGIN
DECLARE @Result TABLE (@id INT NOT NULL, @fieldvalue NVARCHAR(10) NULL);
INSERT INTO TESTTABLE (FIELDVALUE) OUTPUT INSERTED.* INTO @Result VALUES ('テストな値');
END


テストも何もさせていないコードなので間違っているかも知れないけど、おおむねこんな感じ。

INTOを指定しないOUTPUT句だと「全てのテーブルには使えない」からVisualStudioでは生成しないんだろうなぁ・・・。なので全てのテーブルで利用できるSCOPE_IDENTITY関数による取得と返却をやっているんだと思う。



つか、本当にどうしようか困っています・・・。

今の仕事だとトリガはほぼ全てに必須なんでねぇ。何か解決策はないものかなぁ。

0 件のコメント:

コメントを投稿