每个记录

问题描述:

更新日期我想这样的事情每个记录

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 @[email protected]+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 
+1

你应该解释你想做什么而不是只发布一些代码。另外,问题是什么? – Lamak

+0

对不起。我正在尝试使用getdate()填充创建的对象,但每个记录约有0.5秒不同。基本上每个记录半秒钟后有不同的日期。顺便说一句,我不必做一个光标,如果有人可以想到更简单的方法 – DejaVuDBA

+0

你是否使用日期作为表上的主键?如果是这样,为什么它不被设置为主键或至少一个唯一的索引来防止这个问题? – UnhandledExcepSean

您可以利用一个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());