每个记录
问题描述:
更新日期我想这样的事情每个记录
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
答
您可以利用一个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());
你应该解释你想做什么而不是只发布一些代码。另外,问题是什么? – Lamak
对不起。我正在尝试使用getdate()填充创建的对象,但每个记录约有0.5秒不同。基本上每个记录半秒钟后有不同的日期。顺便说一句,我不必做一个光标,如果有人可以想到更简单的方法 – DejaVuDBA
你是否使用日期作为表上的主键?如果是这样,为什么它不被设置为主键或至少一个唯一的索引来防止这个问题? – UnhandledExcepSean