正如您所料,我在 SQL Server 2012 中的某些表上遇到了 DEFAULT 约束中的 GETDATE 问题。
我有两个如下表(A 和 B):
CREATE TABLE [dbo].[TABLE_A_OR_B] (
[TABLE_A_OR_B_PK] BIGINT IDENTITY (1, 1) NOT NULL,
[CREATE_DATETIME] DATETIME2 (7) CONSTRAINT [DF_TABLE_A_OR_B_CREATE_DATETIME] DEFAULT (getdate()) NOT NULL,
[CREATE_USER] VARCHAR (100) CONSTRAINT [DF_TABLE_A_OR_B_CREATE_USER] DEFAULT (suser_sname()) NOT NULL,
...
CONSTRAINT [PK_TABLE_A_OR_B] PRIMARY KEY CLUSTERED ([TABLE_A_OR_B_PK] ASC)
);
而且我有一个程序,我正在执行两个插入 - 第一个到表 A,第二个到 B,没有列 CREATE_DATETIME。他们之间有很多东西。
现在猜猜表 A 和 B 中的 CREATE_DATETIME 列是什么?
两次 - 可能在 1 000 000 条记录之后,从未有过 - 对于来自同一 sp 执行(已验证)的记录,表 A 中的日期时间大于表 B 中的日期时间,例如:
row in A: 2013-11-07 00:02:22.7000000
row in B: 2013-11-07 00:02:22.6970000
你能给我一些线索吗?
评论答案:
1. 没有触发器。
2.一次没有1 000 000条记录,它是第一次出现错误时表中记录的总数。此信息用于统计分析 - 今天错误发生在上次错误后 xx 数千条记录之后 - 所以它非常随机。
3. 是的,语句100%按此顺序执行。
4.没有事务或单-两个不同的进程-相同的错误。
5. 确定 DATETIME2。
重要的!有人告诉我,GETDATE 的精度为 3 毫秒,所以可能 GETDATE 使用循环法循环毫秒,所以两次相同或几乎相同的时间(差异 < 3 毫秒)它可以给出两个不同的近似值?