[seasar-dotnet:1366] Re: DBFlute とトリガーの相性について

菊池和彦 [E-MAIL ADDRESS DELETED]
2009年 6月 5日 (金) 14:47:50 JST


菊池です

 トリガは before / after / insted of のどれでしょう。

 T-SQLではafter トリガで set nocount on をせずに(デフォルト)のまま行を更新していると
@@ROWCOUNTはトリガでの更新数に上書きされてしまう気がします。
(他のトリガ種別については試してないのでわかりません)

 まずはトリガにて set nocount on をしているかを確認してみてください。


2009/06/05 14:18 に Nakai<[E-MAIL ADDRESS DELETED]> さんは書きました:
> お世話になっております。中井と申します。
>
> トリガーが存在するテーブルにBhvのUpdate、Deleteを実行すると
> Exceptionが発生してしまいました。
>
> <環境>
> Dbflute.Net 0.8.8.9
> SQLServer2005
>
>
> <トリガーの内容>
> テーブルの更新履歴を保存する為、
> 「T_A」テーブルに対してInsert、Update、Deleteされたレコードを
> 「T_A_HISTORY」テーブルにInsertします。
>
> 「T_A_HISTORY」テーブルのカラムは「T_A」テーブルのカラム+「履歴タイプ(I,U,D)」+「挿入時刻」です。
>
>
> <Exceptionの内容>
> ・Update時
>        EntityDuplicatedException
> {"The entity was Too Many! it has been duplicated. It should be the only one! But the updatedCount=2: entity={省略}"}
>
> ・Delete時
>  EntityAlreadyUpdatedException
> [EDAO0005]
>
>
> 更新の時、メッセージに「updatedCount=2」とあるのは、HISTORYテーブルにトリガーが挿入したレコードもカウントしているのでしょうか?
>
> 今のところ回避方法として、
> ・トリガーを削除
> ・ExBhvにInsertWithHistory、UpdateWithHistory、DeleteWithHistoryメソッドを
> 作成し、この中で「T_A_HISTORY」への登録を自前で行う
>
> を考えているのですが、他によい方法があれば御教授頂けないでしょうか。
>
> よろしくお願い致します。
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>



-- 
 Kazuhiko Kikuchi <[E-MAIL ADDRESS DELETED]>
  Microsoft Valueable Professional - Visual C# 2004-2008


seasar-dotnet メーリングリストの案内