私たちのウェブサイトから送信されたフォームを収集するテーブルを持っていますが、何らかの理由で、彼らがテーブルを作成したときに、タイムスタンプをテーブルに入れていませんでした。レコードが入力された正確な日時を入力してください。
私はそれがどこかにあることを知っていますが、デフォルト値を設定する方法を見つけることができないようです(Accessのように、getNow()
またはを使用しますNow()
)が、どこに置くかわかりません。
私たちのウェブサイトから送信されたフォームを収集するテーブルを持っていますが、何らかの理由で、彼らがテーブルを作成したときに、タイムスタンプをテーブルに入れていませんでした。レコードが入力された正確な日時を入力してください。
私はそれがどこかにあることを知っていますが、デフォルト値を設定する方法を見つけることができないようです(Accessのように、getNow()
またはを使用しますNow()
)が、どこに置くかわかりません。
回答:
既存のテーブルの既存の列を変更するには:
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn
TheQ
の答えは、私がそうではないと信じている既存の列を変更していると仮定していますか?このデフォルトの制約で新しい列を追加するためのコードについては、私の回答を参照してください。
GETUTCDATE()
代わりにGETDATE()
これは、SSMS GUIを使用して行うこともできます。
(getdate())
に[ デフォルト値]または[バインド]フィールドに入力しますdateadd(minute, 10, GetDate())
するかどうかを確認しようとします。
SQL Serverのそのテーブルで、その列のデフォルト値をに指定しますCURRENT_TIMESTAMP
。その列のデータ型は、datetimeまたはdatetime2です。
例えば
Create Table Student
(
Name varchar(50),
DateOfAddmission datetime default CURRENT_TIMESTAMP
);
CURRENT_TIMESTAMP
返すことに注意してくださいdatetime
。それは避けるべきです。代わりにSYSUTCDATETIME
whichを使用datetime2
してUTC で返します。
一方でマーク答えはで正しいです。
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn
列にデフォルトの日時値を追加するときは、常にタイムゾーンに注意する必要があります。
たとえば、このdatetime
値は、メンバーがWebサイトに参加したときにそれをユーザーに表示してほしいことを示すように設計されてGETDATE()
おり、サーバーに時間を与えるため、ユーザーがサーバーとは異なるロケールにいる場合に不一致が生じる可能性があります。
海外のユーザーとの取引を想定している場合は、次のようなGETUTCDATE()を使用する方がよい場合があります。
現在のデータベースシステムのタイムスタンプを日時値として返します。データベースのタイムゾーンオフセットは含まれません。この値は、現在のUTC時間(協定世界時)を表します。この値は、SQL Serverのインスタンスが実行されているコンピューターのオペレーティングシステムから取得されます。
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETUTCDATE() FOR YourColumn
値を取得するとき、フロントエンドアプリケーション/ウェブサイトは、この値をUTC時間からそれを要求するユーザーのロケール/文化に変換する必要があります。
列のNullを禁止し、列にデフォルトを設定します getdate()
/*Deal with any existing NULLs*/
UPDATE YourTable SET created_date=GETDATE() /*Or some sentinel value
'19000101' maybe?*/
WHERE created_date IS NULL
/*Disallow NULLs*/
ALTER TABLE YourTable ALTER COLUMN created_date DATE NOT NULL
/*Add default constraint*/
ALTER TABLE YourTable ADD CONSTRAINT
DF_YourTable_created_date DEFAULT GETDATE() FOR created_date
新しいテーブルを作成するときの構文は次のとおりです。
CREATE TABLE MyTable
(
MYTableID INT IDENTITY(1,1),
CreateDate DATETIME NOT NULL CONSTRAINT DF_MyTable_CreateDate_GETDATE DEFAULT GETDATE()
)
わかりやすくするために、上記の回答を要約します。
テーブルの名前がCustomer で、4列以下であるとします。
テーブルに新しい列を追加する必要があります。挿入があるたびに、その列はイベントが発生した時間の記録を保持します。
解決:
新しい列を追加します。たとえば、timepurchaseが新しい列であることを、データ型がdatetimeのテーブルに追加します。
次に、次の変更を実行します。
ALTER TABLE Customer ADD CONSTRAINT DF_Customer DEFAULT GETDATE() FOR timePurchase
登録システムのデータベーステーブルを作成するとします。
IF OBJECT_ID('dbo.registration_demo', 'U') IS NOT NULL
DROP TABLE dbo.registration_demo;
CREATE TABLE dbo.registration_demo (
id INT IDENTITY PRIMARY KEY,
name NVARCHAR(8)
);
今、カップルが登録します。
INSERT INTO dbo.registration_demo (name) VALUES
('John'),('Jane'),('Jeff');
次に、彼らが登録したときのタイムスタンプが必要であることに気付きます。
このアプリが地理的にローカライズされた地域に限定されている場合は、ローカルサーバーの時刻をで使用できますGETDATE()
。それ以外の場合は、デフォルトの値について、世界中の視聴者に対するTannerの考慮事項に注意する必要GETUTCDATE()
があります。
この回答のような1つのステートメントで、デフォルト値を含む列を追加します。
ALTER TABLE dbo.registration_demo
ADD time_registered DATETIME DEFAULT GETUTCDATE();
別の登録者を取得して、データがどのように見えるかを見てみましょう。
INSERT INTO dbo.registration_demo (name) VALUES
('Julia');
SELECT * FROM dbo.registration_demo;
id name time_registered 1 John NULL 2 Jane NULL 3 Jeff NULL 4 Julia 2016-06-21 14:32:57.767