【问题标题】:Update date for each record每条记录的更新日期
【发布时间】:2015-10-21 05:19:34
【问题描述】:

我正在尝试这样的事情

 DECLARE @CreateDate DATETIME, @iCount BIGINT
 SET @iCount=0
 SET @CreateDate=DATEADD(s,.5,GETDATE()) 
 DECLARE iCreateDate CURSOR FOR
 SELECT ID
 FROM Table AS 
 WHERE CreateDate IS null ;
 OPEN iCreateDate ;
 FETCH FROM iCreateDate ;
 UPDATE Table
 SET CreateDate = @CreateDate
 WHERE CURRENT OF iCreateDate ;
 SET @iCount=@iCount+1
 WAITFOR DELAY '00:00:00.5';
 WHILE     (SELECT COUNT(ID)
 FROM Table AS 
 WHERE CreateDate IS NULL) > 0
 FETCH NEXT FROM iCreateDate INTO @CreateDate

 CLOSE iCreateDate ;
 DEALLOCATE iCreateDate ;
GO

【问题讨论】:

  • 你应该解释你想要做什么,而不是仅仅发布一些代码。还有,有什么问题?
  • 对不起。我正在尝试使用 getdate() 填充 createdate,但每条记录大约相差 0.5 秒。基本上每条记录在半秒后都有一个不同的日期。顺便说一句,如果有人能想到更简单的方法,我不必做光标
  • 您是否使用日期作为表格的主键?如果是这样,为什么不将其设置为主键或至少是唯一索引以防止出现此问题?

标签: sql-server tsql cursor


【解决方案1】:

您可以利用CTE 为每个生成一个行号,并将其用作时间增量的乘数。

WITH cteNullDates AS (
    SELECT ID, 
           CreateDate,
           ROW_NUMBER() OVER (ORDER BY ID) AS RowNum
        FROM Table
        WHERE CreateDate IS NULL
)
UPDATE cteNullDates
    SET CreateDate = DATEADD(MILLISECOND, RowNum * 500, GETDATE());

【讨论】:

    猜你喜欢
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多