まず、これまでに投稿し、SQL Server:更新トランザクションがトリガーからのものかどうかを指定するオプション?
私はテーブルが更新されるか、または行(複数可)を挿入、これ私がトリガー(AFTER INSERT, UPDATE
)を作成したとき、一つの列を更新する必要があります...優しくしてください。問題は、挿入にupdate文が含まれているため、再帰的であるため、トリガを再起動することです。
私は、2つの異なるトリガにINSERT
とUPDATE
を分離しようとしたが、他のトリガーが所定の位置にあるので、私はのためにボックスアプリケーションのデフォルト値のうち、sp_settriggerorder()
とtrigger_nestlevel()
で問題に遭遇しました。
私の質問は、更新プログラムがアプリケーション自体から来たのか、自分の引き金から来たのかを示すIF句を使用する方法はありますか?ケース、それが私の引き金であれば、私は戻ってくると簡単にELSEできて、もはや再帰的ではありません。
CREATE TRIGGER [dbo].[JobCardMetlInsertUpdateItemDesc]
ON [dbo].[JobCardMetl] AFTER INSERT
AS
BEGIN TRANSACTION [Description]
UPDATE JobCardMetl
SET JobCardMetl.Description = item.Description
FROM JobCardMetl
INNER JOIN item ON JobCardMetl.Item = item.item
WHERE JobCardMetl.RecordDate = (SELECT MAX(JobCardMetl.RecordDate)
FROM JobCardMetl)
COMMIT TRANSACTION [Description]
トリガー再帰(直接トリガトリガデータベースまたはサーバー(?)レベルで無効にすることができます。もちろんそれはすべてに影響します。 – RBarryYoung