我正在做的是,我需要选择一条我刚刚通过DateTime添加的行来获取PK,因为我需要它。
我通过以下方式存储DateTime:
nw
我使用DateTime
搜索我的表格。
我的问题是,如果让我说我在1分钟内放了2行怎么办? 我的sql表将它们存储起来:
由于毫秒不可见,是否会选择它们?(假设一切都在1分钟内发生)
编辑:这是来自我的asp mvc项目。因此,每次运行我的操作时,$scope.fruits = [
{
"type": "fruit",
"content": [
{
"name": "banana",
"type": "edible"
}
{
"name": "apple"
"type": "edible"
}
],
"id": 1
},
{
"type": "vegetable",
"content": [
{
"name": "eggplant",
"type": "edible"
},
{
"name": "poison ivy",
"type": "inedible"
}
],
"id": 2
}
]
都是新的。
答案 0 :(得分:2)
问题是精确度。 TSQL中的GetDate()函数的精度不是c#DateTime,因为GetDate()返回TSQL DateTime。
定义一个日期,该日期与基于24小时制的小数秒的时间相结合。
舍入为.000,.003或.007秒的增量
Ticks属性以百万分之一秒为单位表示日期和时间值,Millisecond属性在日期和时间值中返回千分之一秒。但是,如果您使用重复调用DateTime.Now属性来测量已用时间,并且您关心的是小于100毫秒的小时间间隔,则应注意DateTime.Now属性返回的值取决于系统时钟,在Windows 7和Windows 8系统上的分辨率约为15毫秒。
但是你可以使用更新的(从SQL Server 2008开始)SysDateTime(),它返回一个datetime2(7)值,它应该与C#Datetime的精度相匹配。
定义与基于24小时制的时间相结合的日期。 datetime2可以视为现有日期时间类型的扩展,它具有更大的日期范围,更大的默认小数精度和可选的用户指定精度。
这只是学术上有趣的因为你永远不应该把日期时间用作PK 。
让我们在2016年11月6日上午1:15说出来。您创建了一条记录:
MyPk
------
2016-11-06 01:15:00
一小时后你又创建了另一条记录......
MyPk
------
2016-11-06 01:15:00
2016-11-06 01:15:00
由于夏令时重复PK。没有夏令时?有很多理由不使用DateTime作为PK(只需谷歌搜索 datetime作为主键)。
仅举几例:
答案 1 :(得分:1)
如果您确实希望使用DateTime.Now
second
精度来查找数据的PK,则不应将其声明为一次并在任何地方使用它。相反,你应该这样使用它:
insertDataToDataBase(data, DateTime.Now);
然后10-20秒后
insertDataToDataBase(data, DateTime.Now); //still use DateTime.Now
这样您的DateTime.Now
将始终更新