2016-04-07 18 views
0

挿入されたフィールド、より正確には挿入時に現在の日付/時刻に設定する必要があるDateTimeフィールド内に単一の値を適用する方法が必要です。 私は大学での練習に取り組んでおり、DB内ですべての制約が欲しいと思っています。通常、DEFAULT GetDate()を入れてDEFAULTを挿入に使用しますが、SQL Serverの挿入時にのみ現在の日付/時刻を許可する

CREATE TABLE tester(
d DATETIME not null DEFAULT GETDATE(), 
CONSTRAINT chkd CHECK(d = ????????) 
); 
:しかし

CREATE TABLE tester(
d INTEGER not null DEFAULT 3, 
CONSTRAINT chkd CHECK(d = 3) 
); 

私がしたいことは以下の通りです: は今、私はこれを行うことができ整数を(彼らは手元の問題とは無関係ですので、私は、他のフィールドを省略しました)

check()内のGetDate()を繰り返し実行すると、挿入時にエラーが発生します。これは、マイクロ秒で不一致が発生するためです。 最初の質問はこれが可能なのでしょうか?もしそうなら(私はそう望む)どのように?

+2

を働いているこの答えになりましたか? –

+0

@RyanVincent私はそれを考えなかったのかどうかわかりませんが、私はトリガーを別の場所で使っています。それは本当にシンプルです。 –

答えて

1

は、現在の時刻のフィールドを移入するためにトリガーを使用

CREATE TRIGGER trigger_date ON [dbo].[tester] 
FOR INSERT 
AS 
BEGIN 
    UPDATE tester SET d = GETDATE() WHERE id IN (SELECT id FROM INSERTED); 
END 
GO 
1

testerテーブルの日付/時刻を追跡しないでください。代わりに、外部キー制約としてtesterテーブルのIDを参照する列を持つ別のテーブルを作成します。新しいテーブルには、もう1つの列、DateTimeの列があります。 testerテーブルに挿入すると、新しく作成されたtester行のIDと現在の日付/時刻を含む新しいテーブルに行を挿入するトリガーが起動されます。ライアンさんのコメントに基づいて

+1

ライアンのコメント提案の素晴らしい拡張は、別のテーブルは必要ではないが、テスターテーブルに直接トリガーを作用させることができます –

+0

ええ、私はその値を隔離し、ユーザーが彼らはそれを変えることができるメカニズムを持っています。 –

関連する問題