SQL Server存储过程 - INSERT命令 - DateTime错误序列

时间:2017-08-23 12:58:26

标签: sql sql-server stored-procedures

程序是同步的,好吗?但是,如何解释。

我有一个包含字段的表格(不具体那样):

ID    INT PRIMARY KEY IDENTITY, 
DATE  DATETIME NOT NULL

SP执行的插入是:(此SP在另一个内部调用)

INSERT TABLE  VALUES ( SYSDATETIME()  )

但表格值为:

ID | DATETIME  
6  | 2017-08-23 09:40:00.000
7  | 2017-08-23 09:39:46.690

怎么可能? ID 6是“最新的”,而不是ID 7.

在我们的上下文中,我们需要通过IDENTITY字段进行排序。 我无法通过DateTime对查询进行排序,因为其他字段。 E.g:

ID | DATETIME                 | ACTION
6  | 2017-08-23 09:40:00.000  | Production Start
7  | 2017-08-23 09:39:46.690  | Production End

我在开始操作之前执行了End操作。时间表错了。

3 个答案:

答案 0 :(得分:1)

我怀疑你的进程有一些并发地狱。

这是MSDN的解释。 (比我以前更好)

  

事务中的连续值 - 事务插入   不保证多行获取行的连续值   因为表上可能会出现其他并发插入。如果值   必须是连续的,然后交易应使用独占锁   在桌面上或使用SERIALIZABLE隔离级别。

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql-identity-property

答案 1 :(得分:0)

您的问题无法重现。你正在做的不是你描述的事情。

我进行了以下测试:

CREATE TABLE dbo.TTest (
 [ID] int PRIMARY KEY IDENTITY(1,1)
, [DT] datetime NOT NULL
);


--run the following two steps manually multiple times
INSERT INTO dbo.TTest
VALUES (SYSDATETIME());

SELECT * FROM dbo.TTest;
--

DROP TABLE dbo.TTest

结果是:

ID  DT
1   2017-08-23 09:05:23.450
2   2017-08-23 09:05:36.397
3   2017-08-23 09:05:57.313

答案 2 :(得分:0)

遇到错误!

SQL函数SYSDATETIME“返回datetime2(7)值,该值包含运行SQL Server实例的计算机的日期和时间。” - https://docs.microsoft.com/en-us/sql/t-sql/functions/sysdatetime-transact-sql

在我们的服务器上,我们发现(在EventViewer日志中)两个正在同步服务器时钟的例程,相互冲突。

PreviousTime 2017-08-31T12:03:03.947848200Z
NewTime 2017-08-31T12:02:06.821000000Z
ProcessId 0x854
ProcessName DSHO_SincPCnetV11.exe

PreviousTime 2017-08-31T12:21:02.471426500Z
NewTime 2017-08-31T12:21:59.544982100Z
ProcessId 0x484
ProcessName C:\ Windows \ System32 \ svchost.exe