1

SQL Server 2008 を使用しており、データベースで変更追跡が有効になっています。データベース内のテーブルの 1 つで、次のトリガーを作成しました。

CREATE TRIGGER [dbo].[tr_student]
   ON [dbo].[Student]
   FOR UPDATE,DELETE
AS 
BEGIN
   SET NOCOUNT ON;
   SELECT CHANGE_TRACKING_CURRENT_VERSION()
END

このトリガーの目的は、テーブル dbo.Student のレコードを更新または削除するときに、現在の変更追跡バージョン ID を取得する必要があることです。

しかし、テーブル内のレコードを更新/削除すると、CHANGE_TRACKING_CURRENT_VERSION() は現在の version_id ではなく、以前の version_id を提供します。トリガーが起動された後、select CHANGE_TRACKING_CURRENT_VERSION() を実行すると、正しい現在のバージョン ID が取得されます。

Change_Tracking_Current_Version() id はトリガー後にのみ変更されますか? トリガーで正しい Change_Tracking_Current_Version() を取得する方法はありますか?

4

1 に答える 1

3

マニュアルによると、この機能は

最後にコミットされたトランザクションに関連付けられているバージョンを返します。

(強調は私です。)

トリガーの実行中、トランザクションはまだコミットされていません。そうです、新しい値はトリガーの後に返されます。

さらに、トリガーで新しい ID を取得する方法はありませ

変更の追跡は、コミットされたトランザクションに基づいています。

(強調は私です。)

于 2012-10-30T12:31:15.750 に答える