2010-11-30 14 views

答えて

11

許可しないヌルとgetdate()

/*Deal with any existing NULLs*/ 
UPDATE YourTable SET EntryDate=GETDATE() WHERE EntryDate IS NULL 

/*Disallow NULLs*/ 
ALTER TABLE YourTable ALTER COLUMN EntryDate DATE NOT NULL 

/*Add default constraint*/ 
ALTER TABLE YourTable ADD CONSTRAINT 
    DF_YourTable_EntryDate DEFAULT GETDATE() FOR EntryDate 
+2

これは最適なソリューションです。クエリが明示的にEntryDateフィールドにNULLを提供する場合、クエリはエラーになります。クエリはEntryDateに何も指定しないか、DEFAULT VALUESを指定する必要があります。 –

+0

おそらく、彼が求めているものではない – smirkingman

+1

@smirkingman - あいまいなIMOです。 「値がクエリで提供されなかった場合」をどのように解釈するかによって異なります。私の答えは、INSERT INTO [YourTable](Col1)VALUES( 'X') ' –

1
Update table 
set EntryDate = getdate() 
where EntryDate is null 
+2

投稿する場合は、テキストエディタでこれらの行を強調表示し、エディタツールバーの[コード]ボタン(101 010)をクリックして、フォーマットや構文を強調表示してください。 –

+0

また、これは正確に自動ではありません、OPはおそらくそれが期待されるように。確かに - それは今日の日付にNULL値を更新する - それは明示的に呼び出される必要があります、それはデータが挿入されたときに自動的に行いません.... –

0

別の解決策の列にデフォルト設定:あなたのテーブルの名前を変更し、ない同じ名前のビューを作成

をあなたが望むロジックです:

CREATE VIEW TableName 
AS 
SELECT Column1, Column2, ... ISNULL(EntryDate, GETDATE()) 
FROM Old_TableName 

次に、実際のデータを変更しないでください。bあなたが今日の日付を報告しているそのテーブルのためのヌル値を得るならば。

+0

これにより、EntryDateの値が他の回答と大きく異なるようになります。問題はあいまいなので、どちらが正しいかわからない。ビューを使用すると、NULL EntryDate列が現在の日時に変更されたUPDATE回答とは対照的に、NULL EntryDate列に常に現在の日時値(各実行ごとに異なる)が設定されます。選択します。 –

+1

私はISNULLの代わりにCOALESCEを使用しなければならないという点を除いて、これは適切な解決策だと思います –

+0

@idevlop - それはなぜですか?私は – JNK

関連する問題