我正在使用 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
功能,但如何在上述情况下使用它?
任何帮助,将不胜感激。谢谢。
你有两个选择:
选项 A
将 RunningDate 列从您的表中移除并创建一个视图。将 RunningDate 列添加到视图中CAST(CAST(GETDATE() AS DATE) AS DATETIME)
。
选项 B
创建一个在午夜定期更新表的 SQL Server 代理作业。请记住去掉日期的时间部分(例如使用选项 A 中的强制转换),因为您永远无法确定语句恰好在 00:00:00.000 运行。
试试这个——
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
如果它只是一个字段,我建议不要将它添加到数据库中。如果要在存储过程中使用它,请使用
SELECT GETDATE()
或者
SELECT DATEADD(day, DATEDIFF(day, '19000101', GETDATE()), '19000101');
匹配或DateTime.Now
在您的代码中 - 如果它是 .NET。只需将一个条目存储到表中,就会增加很多开销。