我有一个SQL Server数据库,它将包含许多连接的表,每个表都有一个主键。我有一个Dictionary
跟踪每个表的主键字段。我的任务是每天从以属性为中心的XML文件中提取数据并将它们插入到主数据库中。每个XML文件具有相同的模式。我通过使用XMLReader
并将数据导入DataSet
来完成此操作。生成一个唯一的主键
我无法使用AutoNumber
作为密钥。比方说,昨天的XML文件产生了DataTable
类似于以下,并将其导入到数据库
-------------------------------------
| Key | Column1 | Column2 | Column3 |
|-----------------------------------|
| 0 | dsfsfsd | sdfsrer | sdfsfsf |
|-----------------------------------|
| 1 | dertert | qweqweq | xczxsdf |
|-----------------------------------|
| 2 | prwersd | xzcsdfw | qwefkgs |
-------------------------------------
如果今天的XML文件中生成以下DataTable
-------------------------------------
| Key | Column1 | Column2 | Column3 |
|-----------------------------------|
| 0 | sesdfsd | hjghjgh | edrgffb |
|-----------------------------------|
| 1 | wrwerwr | zxcxfsd | pijghjh |
|-----------------------------------|
| 2 | vcbcvbv | vbnvnbn | bnvfgnf |
-------------------------------------
然后,当我去导入新数据输入数据库使用SqlBulkCopy
,那么将会有重复的密钥。我的解决方案是使用DateTime.Now.Ticks
来生成唯一的密钥。从理论上讲,这应该总是创造一个独特的关键。
但是,由于某种原因,DateTime.Now.Ticks
不是唯一的。例如,即使我在不同时间生成该值,一行中的5个记录都可能具有密钥635387859864435908
,并且接下来的7个记录可能具有密钥635387859864592164
。我想说,问题的原因是我的脚本在更新时间之前多次调用DateTime.Now.Ticks
。
任何人都可以想到更好的方法来生成密钥吗?
是否有一个原因,你不能只使用GUID? –
'DateTime.Now.Ticks'不是唯一的。正如你发现的那样,一个处理器可以在* tick中完成的工作量实际上相当多。 –
@ChrisHaas我还没有听说过GUID。我正在研究它们是否能解决问题 – TFischer