1

は、私はこのようなテーブルを持っている:更新最終更新日付列

id name modified 
11 John 2016-07-12 15:49:45 
22 Abraham 2016-07-12 15:52:03 

私は、行の最後の更新日時を追跡する「修正」列を更新する必要があります。私はトリガーを使ってこれを行っていますが、トリガーがパフォーマンスを悪化させるのを読んでいます。制約を使ってこれを行う方法はありますか?

答えて

0

UPDATE句にDEFAULT制約とDEFAULTキーワードを使用できます。次の例を参照してください。

CREATE TABLE UpdateTest 
(
    ID int IDENTITY, 
    Name varchar(10), 
    Modified datetime2(2) CONSTRAINT DF_Modified DEFAULT (SYSDATETIME()) 
) 

--ID from IDENTITY, Modified from DEFAULT implicitly 
INSERT UpdateTest(Name) VALUES('Test') 

--Modified from DEFAULT explicitly 
UPDATE UpdateTest SET Name='Test2', Modified=DEFAULT 
+0

Dyl:ありがとうございます。更新中に、変更された列に「DEFAULT」パラメータを明示的に渡す必要があります。変更された列に値を渡さずに変更された日付を取得する方法はありますか? – curiousboy

+0

変更された列のパラメータを渡さなければならない場合、すべての更新に対してgetdate()として変更された列の値を設定できます。 ex; update updateTest SET Name = 'Test2'、Modified = getdate()ID = 'some_value'です。私はjavaコードで毎回getdate()を渡すこともできます。申し訳ありませんが私の質問にその基準を言及していない、あなたは代替のためにチェックしてください。 – curiousboy

+0

私が知る限り、DEFAULTキーワードまたは明示的なGETDATE()呼び出しを省略することはできません。 SQL Serverは、列の更新と更新された行の値の変更を何ら区別しなければなりません。論理的には、何らかの区別子が存在しなければならない。 –

関連する問題