程序是同步的,好吗?但是,如何解释。
我有一个包含字段的表格(不具体那样):
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操作。时间表错了。
答案 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