TSQL生成唯一的日期时间值

时间:2014-04-16 09:53:40

标签: sql sql-server

我正在尝试为一组旧值生成唯一的日期时间值。不幸的是,GETDATE()调用仅被评估一次,这导致每行的日期时间相同。

UPDATE e
SET e.moddate = GETDATE()
FROM dbo.entries as e

有谁知道如何延迟单次插入或如何多次评估GETDATE()调用?

提前致谢。

3 个答案:

答案 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())