2

dbに値を挿入すると、その列の値が現在の日時として設定されますが、更新ステートメントを実行すると適用されますか?

例えば

テーブルスキーマ:

Id, Name, CreatedDate(getdate())

テーブルに挿入するid = 1 , name = 'john'と設定されますcreatedDate = current date

更新ステートメントを実行した場合

update table set name="john2" where id =1

更新されcreatedDateますか?

4

4 に答える 4

8

いいえ、DEFAULT CONSTRAINTは、INSERTでのみ呼び出され、(a)NOT NULL制約と組み合わせた場合、または(b)DEFAULTVALUESを使用した場合にのみ呼び出されます。UPDATEの場合、SQLServerはDEFAULTCONSTRAINTをまったく調べません。現在、トリガーが必要です(SQL Server 2008 R2テーブルに「最終更新」列を追加するにはどうすればよいですか?)が、この機能を組み込むための複数の要求があります。

SQLServerをだましてテンポラルテーブルを使用してこれを行う方法についてブログに書いています。

しかし、これは警告と制限に満ちており、実際には他の複数の同様の投稿を軽視しているだけでした。

于 2012-06-07T13:30:02.990 に答える
4

うわー-理解するのは難しい...

手がかりに基づいてNOだと思います。

列にNULLのレコードを挿入し、その列にデフォルト値が定義されている場合、nullの代わりにデフォルト値が格納されます。

updateは、ステートメントで指定された列のみを更新します。

特別なロジックを実行するトリガーがない限り、その場合は、トリガーコードを調べて答えを知る必要があります。

于 2012-06-07T13:23:25.770 に答える
1

updateステートメントがgetfate()で列を更新するように指示している場合、たとえば名前を更新するだけで、createdate列(getdate()で挿入された)がある場合、この列は影響を受けません。

于 2012-06-07T13:24:51.337 に答える
0

これは、以下のステートメントのOrderDateフィールドで行ったようにDEFAULT制約を使用して実現できます。

CREATE TABLE Orders(O_Id int NOT NULL、OrderNo int NOT NULL、P_Id int、OrderDate date DEFAULT GETDATE())

于 2016-03-11T17:52:31.833 に答える