如何将记录从一个表插入另一个表并插入唯一的日期时间值

时间:2014-10-01 15:26:54

标签: sql-server tsql

我想从一个表中选择值到另一个表,并使用唯一的日期时间条目插入每一行。我遇到的问题是GETDATE()或SYSUTCDATETIME()函数似乎不够快,我得到重复的日期时间条目。

例如     创建表#T1     (tnum int)

insert into #T1 select 1
insert into #T1 select 2
insert into #T1 select 3

create table #T2
(
Id int identity(1,1),
tnum int,
entrydate datetime
)

insert into #T2 SELECT #T1.tnum,  getDate() FROM #T1

select * from #T2

这导致以下

1 1 2014-10-01 11:14:15.673

2 2 2014-10-01 11:14:15.673

3 3 2014-10-01 11:14:15.673

我的表格设计使用日期时间列作为唯一索引的一部分,我需要它们是唯一的。我想要的结果就像是

1 1 2014-10-01 11:14:15.673

2 2 2014-10-01 11:14:15.674

3 3 2014-10-01 11:14:15.675

我正在使用Microsoft SQL Server 2008。

1 个答案:

答案 0 :(得分:0)

选择很好,但您应该使用datetime2作为列的格式,因为它可以存储更精确的时间值。

datetime2的精度为100纳秒而不是datetime,它将其四舍五入为.003.005.007

<强>更新

或者将insert语句包装在while循环中,其中每个步骤都包含几毫秒的睡眠时间。

我创建了这个小提琴,在那里你可以看到它是如何工作的(在MSSQL中):http://sqlfiddle.com/#!3/62f0d/2

基本上,该块如上所述:

/* @i represents a number of transactions, it can be equal to a count(*) for example */

WHILE (@i <= 3)
  BEGIN
    INSERT INTO #results VALUES (@i ,getDate(), getDate())
    WAITFOR DELAY '00:00:00.002'
    SET @i = @i + 1
END