web-dev-qa-db-ja.com

データベースのDateTimeフィールドを自動化していますか?

MVCを学習するための簡単なテストデータベースを作成しています。レコードが作成された日時を示すDateTimeフィールドを追加したい。

ID = int
Name = Char
DateCreated = (dateTime, DateTime2..?)

このタイプのDateTimeキャプチャは自動的に実行できると感じていますが、それだけです。できますか?もしそうならどのように?

私たちが主題である間:レコードが最後に更新されたときのDateTimeをキャプチャした別のフィールドを含めたい場合、どうすればよいでしょうか。

これを手動で行わないことを望んでいます。

どうもありがとう

マイク

29
RocketGoal

日付フィールドの「デフォルト値」をgetdate()に設定する必要があります。テーブルに挿入されたレコードには、このフィールドの値として挿入日が自動的に設定されます。

「デフォルト値」プロパティの場所は、実行しているSQL Server Expressのバージョンによって異なりますが、テーブルの編集時にテーブルの日付フィールドを選択すると表示されるはずです。

41
Ant

はい、ここに例があります:

CREATE TABLE myTable ( col1 int, createdDate datetime DEFAULT(getdate()), updatedDate datetime DEFAULT(getdate()) )

CreatedDate列とupdatedDate列を指定せずにテーブルに挿入できます。

INSERT INTO myTable (col1) VALUES (1)

または、キーワードDEFAULTを使用します。

INSERT INTO myTable (col1, createdDate, updatedDate) VALUES (1, DEFAULT, DEFAULT)

次に、updatedDate列を更新するためのトリガーを作成します。

CREATE TRIGGER dbo.updateMyTable 
ON dbo.myTable
FOR UPDATE 
AS 
BEGIN 
    IF NOT UPDATE(updatedDate) 
        UPDATE dbo.myTable SET updatedDate=GETDATE() 
        WHERE col1 IN (SELECT col1 FROM inserted) 
END 
GO
32
Kevin