我想从一个表中选择值到另一个表,并使用唯一的日期时间条目插入每一行。我遇到的问题是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。
答案 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