SQLServer2008R2 を使用しています。という列がありますRunningDate
。
私が望むのは、今日 の値を設定すると、明日はRunningDate
として2013-08-13 00:00:00.000
自動的に更新されるということ2013-08-14 00:00:00.000
です。
関数については知っていDATEADD
ますが、上記のシナリオでどのように使用しますか?
どんな助けでも大歓迎です。ありがとう。
SQLServer2008R2 を使用しています。という列がありますRunningDate
。
私が望むのは、今日 の値を設定すると、明日はRunningDate
として2013-08-13 00:00:00.000
自動的に更新されるということ2013-08-14 00:00:00.000
です。
関数については知っていDATEADD
ますが、上記のシナリオでどのように使用しますか?
どんな助けでも大歓迎です。ありがとう。
次の 2 つのオプションがあります。
オプション A
テーブルから RunningDate 列を除外し、代わりにビューを作成します。RunningDate 列を としてビューに追加しますCAST(CAST(GETDATE() AS DATE) AS DATETIME)
。
オプション B
テーブルを定期的に深夜に更新する SQL Server エージェント ジョブを作成します。ステートメントが正確に 00:00:00.000 で実行されることを確認できないため、日付の時刻部分を削除することを忘れないでください (たとえば、オプション A のキャストを使用)。
フィールドが 1 つしかない場合は、データベースに追加しないことをお勧めします。ストアドプロシージャで使用する場合は、使用します
SELECT GETDATE()
また
SELECT DATEADD(day, DATEDIFF(day, '19000101', GETDATE()), '19000101');
一致するかDateTime.Now
、コード内で - .NET の場合。1 つのエントリをテーブルに格納するだけで、多くのオーバーヘッドが追加されます。
これを試してみてください -
DECLARE @temp TABLE
(
ID INT PRIMARY KEY
, RunningDate DATETIME
)
INSERT INTO @temp (ID)
VALUES (1),(2),(3),(5),(8)
UPDATE tt
SET RunningDate = CAST(DATEADD(dd, t.rn, GETDATE()) AS DATE)
FROM @temp tt
JOIN (
SELECT
ID
, rn = ROW_NUMBER() OVER (ORDER BY 1/0) - 1
FROM @temp
) t ON t.ID = tt.ID
SELECT *
FROM @temp
出力 -
ID RunningDate
----------- -----------------------
1 2013-08-13 00:00:00.000
2 2013-08-14 00:00:00.000
3 2013-08-15 00:00:00.000
5 2013-08-16 00:00:00.000
8 2013-08-17 00:00:00.000