3

次の表があります。

Study   id
Pepsi   1
Coke    2
Sprite  3

上の表に新しい列を追加する必要がありtimestampます。つまり、スタディの作成日時がこの列に保存されます。既存の行にどの値を設定する必要がありますか? または、「タイムスタンプ」列には、新しく作成された行に対してのみ値を設定する必要がありますか?

次のクエリを使用して、新しい列を追加しました。

alter table Study add Timestamp datetime
4

2 に答える 2

2

既存の行にどの値を設定する必要があるかを伝える方法はありません。それはあなた次第です。他の情報をつなぎ合わせて作成時間を取得できる場合は、おそらくこれを 1 つずつ行うか、既存の行をそのままにしておくことができますNULL

GETDATE()列にデフォルトの likeを設定し、それを に設定するとNOT NULL、既存のすべての行が現在の日付と時刻を継承するように強制されます。これらを に戻すことはできませんNULL。私は1900-01-01不明を表すようなガベージ トークン値を使用することにまったく反対です。また、「日付が 2013 年 10 月 8 日の場合、それは私たちが知らなかったからです」などのようにコードを変更することも信じていません。したがってNULLable、デフォルトで列を追加することをお勧めします。

ALTER TABLE dbo.Study ADD CreationTime DATETIME NULL DEFAULT CURRENT_TIMESTAMP;
GO

DEFAULT列を null 可能のままにしておくと、 DML がそれを に設定しない場合にのみ制約が有効になることに注意してくださいNULL。たとえば、INSERTステートメントが明示的にNULLそこに配置されている場合、デフォルトは無視されます。これを回避する方法は、トリガーを使用することです (更新を処理するのと同じように):

CREATE TRIGGER dbo.StudyCreationTime
ON dbo.Study
FOR INSERT 
AS
BEGIN
  SET NOCOUNT ON;

  UPDATE s
    SET s.CreationTime = CURRENT_TIMESTAMP
    FROM dbo.Study AS s
    INNER JOIN inserted AS i
    ON s.StudyID = i.StudyID;
END
GO
于 2013-10-08T14:30:04.003 に答える