我有大约10,000条记录,我希望从特定时间开始展开保留的处理DATETIME字段。
所以我想遍历所有记录,将日期的秒数更新为特定时间,然后下一条记录再添加2秒到上一个日期时间,直到所有记录都有2秒添加到开始日期时间。
即。 第1行的Date1 2016-09-26 18:27:50.000 第2行的Date2 2016-09-26 18:27:52.000 第3行的Date3 2016-09-26 18:27:54.000
while循环可以实现吗?
create table #secondsiterate ( procdate datetime )
insert into #secondsiterate ( procdate )
select GETDATE()
WHILE (just want to add 2 seconds to each date field until it is done)
BEGIN
UPDATE #secondsiterate set procdate = DATEADD(ss,2,procdate)
END;
答案 0 :(得分:1)
假设您正在尝试更新" DateColumn"在表格#34; MyTable"中,有一列" OrderColumn"您可以使用表中的(不是DateColumn)来排序以确定哪些行获取了哪些值,然后,以下SQL应该执行您想要的操作。
DECLARE @startDate datetime;
SELECT @startDate = GETDATE(); -- Set this however you wish
UPDATE x
SET DateColumn = DATEADD(SS, 2*rn, @startDate)
FROM (SELECT *, (ROW_NUMBER() OVER (ORDER BY orderColumn)) AS rn FROM YourTable) x
您需要将@startDate变量...设置为当前日期(如图所示),或者设置为表格中DateColumn的MAX或MIN日期...但是您需要申请。
避免WHILE和FOR循环的秘诀是在子选择或CTE(公用表表达式)中使用ROW_COUNT()。这使您可以使用比迭代循环或游标更快,更高效的集合操作。