我正在使用SQLServer2008R2。我有一个名为RunningDate
的列。
我想要的是,如果今天我将RunningDate
的值设置为2013-08-13 00:00:00.000
,那么明天它将自动更新为2013-08-14 00:00:00.000
。
我知道DATEADD
函数但是如何在上面的场景中使用它?
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
您有两种选择:
选项A
将RunningDate列保留在表格之外并改为创建视图。将RunningDate列添加到视图CAST(CAST(GETDATE() AS DATE) AS DATETIME)
。
选项B
创建一个SQL Server代理作业,该作业在午夜定期更新表。请记住去除日期的时间部分(例如使用选项A中的强制转换),因为您永远无法确定该语句是否在00:00:00.000完全运行。
答案 1 :(得分:0)
试试这个 -
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
答案 2 :(得分:0)
如果只有一个字段,我建议不要将其添加到数据库中。如果要在存储过程中使用它,请使用
SELECT GETDATE()
OR
SELECT DATEADD(day, DATEDIFF(day, '19000101', GETDATE()), '19000101');
匹配或代码中的DateTime.Now
- 如果它是.NET。只需将一个条目存储到表中,就会增加很多开销。