Sql server 如何将记录从一个表插入到另一个表中,并使用唯一的日期时间值插入

Sql server 如何将记录从一个表插入到另一个表中,并使用唯一的日期时间值插入,sql-server,tsql,Sql Server,Tsql,我想从一个表中选择值到另一个表中,并用唯一的datetime条目插入每一行。我遇到的问题是GETDATE或SYSUTCDATETIME函数似乎速度不够快,并且我得到了重复的datetime条目 比如说 创建表T1 特努姆国际酒店 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, entrydat

我想从一个表中选择值到另一个表中,并用唯一的datetime条目插入每一行。我遇到的问题是GETDATE或SYSUTCDATETIME函数似乎速度不够快,并且我得到了重复的datetime条目

比如说 创建表T1 特努姆国际酒店

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
这将导致以下结果

112014-10-01 11:14:15.673

2 2014-10-01 11:14:15.673

3 2014-10-01 11:14:15.673

我的表设计使用datetime列作为唯一索引的一部分,我需要它们是唯一的。我想要的结果大概是

112014-10-01 11:14:15.673

2 2014-10-01 11:14:15.674

3 2014-10-01 11:14:15.675


我使用的是Microsoft SQL Server 2008。

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

datetime2的精度为100纳秒,而datetime的精度为.003、.005或.007

更新

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

我创建了这个提琴,您可以在这里看到它在MSSQL中的工作原理:

基本上,模块如上所述:

/* @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函数的速度似乎不够快,我得到了重复的datetime条目。你的意思是,当你得到重复的日期时间时,看起来太快了吗?听起来你想用datetime作为主键或类似的东西,这有什么原因吗?为什么不使用时间戳字段?然后修复你的表设计。这个例子可能过于简化,无法定义我的问题,但我想要一个进入日期,它将是自然索引注释的一部分。我指的不是主键。不应该有任何理由添加一个列,比如sequence,其唯一目的是使行唯一。我问题的主要部分仍然存在——如何插入唯一的datetime条目。这不是一个表设计问题。也许这不是一个数据设计问题,但它是一个数据设计问题。