如何将记录从一个表插入另一个表并插入具有唯一日期时间值
问题描述:
我想从一个表中选择值到另一个表中并使每行都插入一个唯一的日期时间条目。我遇到的问题是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
我的表设计使用datetime列作为唯一索引的一部分,我需要这些是唯一的。我希望的结果会是这样的
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的
答
的选择是好的,但你应该使用datetime2
为列的格式,因为它可以让你存放更精确的时间值。
datetime2
有100个nanosecs的精度,而不是datetime
,它舍入到.003
,.005
或.007
UPDATE
或者你换你的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
“GETDATE()或SYSUTCDATETIME( )功能似乎不够快,我得到重复的日期时间条目。“你是不是认为看起来*速度太快,因为你得到重复的日期?这听起来像你试图使用日期时间作为主键或类似的,是否有这样的原因? – Kritner 2014-10-01 15:31:12
为什么不使用TimeStamp字段? – ericpap 2014-10-01 15:32:26
然后修复你的餐桌设计。 – Paparazzi 2014-10-01 16:04:14