2011-03-15 87 views
0

我有大量的记录被导入到SQL Server 2005表中。我需要能够保持它们导入的顺序。我正在使用DateTime字段并将其填充到GETDATE(),但这不够精确。SQL Server 2005中的高精度日期/时间戳

有什么建议吗?

编辑,只是为了清理......我不在乎他们在表中出现的顺序。我需要能够订购它们并保持它们插入的顺序。现在的问题是,当我使用我的DateTime字段执行ORDER BY时,由于缺少精度,几个记录在同一日期。

+0

源数据是什么样的? – gbn 2011-03-15 14:37:45

+0

任何依赖插入顺序的东西迟早都会中断。如果命令很重要,那么就应该有一个领域(如乌里亚的建议)。 – 2011-03-15 14:38:47

+0

SQL Server 2005没有比'DateTime'更精确的了(3.33ms) - 如果你需要更高的精度,下降到100ns,你需要去SQL Server 2008和'DateTime2'数据类型 – 2011-03-15 15:01:54

回答

2

精度不够高,因为导入每秒导入的行数多于datetime数据类型中的精度?

您使用什么机制来导入行?

我会建议一个标准的标识列,它几乎可以保证增加(但是有人可以启用标识插入并在任何有差距的地方插入一行,这可能在由于约束而回滚的事务期间发生违规或类似)。要注意的是,如果你有多个并行插入(不同的连接或任何),它们将是交错的,所以你不能使用一个简单的范围来查找来自特定源文件的所有东西,比方说。

很多次使用SSIS,我们在数据流中分配给行的批次中有一个批次标识符和一个序列号(与目标表上可能存在的任何标识分开)。

1

你没有提到你是如何导入记录,但添加一个自动递增的标识列到你的表应该工作正常。

+0

我在想这个,但是我是在假设回复自动增加身份列以进行排序是一种不好的做法。我认为这会在我的情况下表现良好。 – 2011-03-15 14:43:11

+0

我打算让问题再打开一会儿,看看其他选项可能是什么。 – 2011-03-15 14:43:33

+0

@Mike,依靠标识列进行排序比插入顺序要好得多。我假设你需要保留插入顺序,因为你希望选择* without * order by clause。请注意,有*无法保证*这会按照您插入的顺序返回结果。 – 2011-03-15 15:22:18