-3

我正在使用 SQLServer2008R2。我有一个名为RunningDate.

我想要的是,如果今天我将值设置为RunningDate2013-08-13 00:00:00.000那么明天它将自动更新为2013-08-14 00:00:00.000.

我知道DATEADD功能,但如何在上述情况下使用它?

任何帮助,将不胜感激。谢谢。

4

3 回答 3

1

你有两个选择:

选项 A

将 RunningDate 列从您的表中移除并创建一个视图。将 RunningDate 列添加到视图中CAST(CAST(GETDATE() AS DATE) AS DATETIME)

选项 B

创建一个在午夜定期更新表的 SQL Server 代理作业。请记住去掉日期的时间部分(例如使用选项 A 中的强制转换),因为您永远无法确定语句恰好在 00:00:00.000 运行。

于 2013-08-13T11:34:58.507 回答
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
于 2013-08-13T11:36:23.743 回答
0

如果它只是一个字段,我建议不要将它添加到数据库中。如果要在存储过程中使用它,请使用

SELECT GETDATE()

或者

SELECT DATEADD(day, DATEDIFF(day, '19000101', GETDATE()), '19000101');

匹配或DateTime.Now在您的代码中 - 如果它是 .NET。只需将一个条目存储到表中,就会增加很多开销。

于 2013-08-13T11:38:29.760 回答