我正在尝试为一组旧值生成唯一的日期时间值。不幸的是,GETDATE()调用仅被评估一次,这导致每行的日期时间相同。
UPDATE e
SET e.moddate = GETDATE()
FROM dbo.entries as e
有谁知道如何延迟单次插入或如何多次评估GETDATE()调用?
提前致谢。
答案 0 :(得分:1)
您需要生成某种公式才能执行此操作。系统不知道你想用什么逻辑去寻找唯一的日期。
如果我愿意,我会做这样的事情
update e set e.moddate = DateAdd(second, 1, (select max(moddate) from dbo.entries)) FROM dbo.entries as e where e.id != 1
此处系统将选择最后一个最高日期并为其添加1秒,现在,我所做的是输入一个记录为TOTAL记录计数 - 现在(),作为日期,所以最后一条记录今天到达'时间。这样我就可以获得每条记录的唯一日期时间。
答案 1 :(得分:0)
试试这个:
;with cte as
(select *,row_number() over (partition by getdate() order by getdate()) rn from entries)
update entries
set [moddate] = dateadd(second,rn,getdate())
from entries e
inner join cte c on e.col1 = c.col1
只要您有另一个名为col1
的列,无论其唯一性如何,这都会有效。
演示here。
答案 2 :(得分:0)
with C as
(
select e.moddate,
row_number() over(order by 1/0) as s
from dbo.entries as e
)
update C
set C.moddate = dateadd(second, C.s, getdate())