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 件のコメント:
コメントを投稿