5

レコードが挿入または更新されたときに、「ModifyDate」列に自動的にデータが入力されるようにしたいだけです。

トリガーを使用する必要がありますか、それとも計算列を使用しても大丈夫ですか?

(SSMS2005およびSQL Server 2005 Expressを使用)

4

3 に答える 3

5

INSERTされた部分は簡単です。その列にデフォルト値を定義するだけで、新しい行を挿入するときに、その列の値を指定しないでください。

UPDATEの部分は扱いにくいです。つまり、 ON UPDATEを起動するトリガーを作成してから、その列を更新する必要があります。SQLServerでこれを行う方法は他にないと思います。

質問は:あなたは本当に実際のカレンダーの日付が必要ですか?そうでない場合、行が変更されたかどうかに関する「マーカー」のみが必要な場合は、代わりにROWVERSION列タイプ(旧称TIMESTAMP)を確認してください。

このために計算列をどのように使用できるかはわかりません。その日付をどこかに保存し、INSERTと後続の各UPDATEで最新の状態に保つ必要があります。これを実行できるのは、トリガーだけです。

于 2010-05-12T21:24:31.677 に答える
3

サーバーのgetDate関数を使用して、トリガーを避け、ストアドプロシージャを使用して[変更日]列を設定することをお勧めします。

例:

顧客の更新SetFirstName='Jim'、LastName ='Jones'、DateModified = getDate()

于 2010-05-12T21:42:55.000 に答える
2

計算列ではなく、デフォルトの制約を意味していると思います。

もしそうなら、それは大丈夫です。私はそのようにするのが好きです。考えられる欠点の1つは、クライアントがデフォルト値をオーバーライドできることですが、クライアントを信頼しない場合は、テーブルアクセスをストアドプロシージャでラップすることをお勧めします。

トリガーも機能しますが、トリガーはさらに複雑になる傾向があります。トリガーを含むコーディングエラーは、データベースで最も難しい問題の1つです。

于 2010-05-12T21:24:13.907 に答える