GUID 全为零的 MS SQL table

MS SQL table with GUID All Zeros

我继承了一个 Web 应用程序,其中一个后端 MS SQL table 有一个字段:

Allow Nulls = No, DataType = uniqueidentifier, DefaultValue = newid(), Condensed Data = Type uniqueidentifier

在数千行中,有些行的 GUID 全为零。它似乎不是遗留数据,因为有些数据具有最近的创建日期。

应用程序创建新记录时,SQL 服务器为何未在该字段中放置正确的 GUID?

编辑:此字段的 EF 上下文具有以下内容:

entity.Property(e => e.ThreadId).HasDefaultValueSql("newid()");

如果 SQL 列可以为空,则问题出在您的 C# 代码中。确保 POCO 类 也使用可为空的 Guid。还要确保在创建新实例时初始化 属性。不可为 null 的 Guid 的 C# 默认值是全零 Guid。如果问题仅存在于旧数据,则代码可能已经修复。

uniqueidentifier 数据类型并不意味着它将是唯一的。如果你生成 NEWID() 那么它会生成唯一的 id 但同样总是有可能生成相同的 id。

对于 0 的

insert into t values ('00000000-0000-0000-0000-000000000000');
insert into t values ('00000000-0000-0000-0000-000000000000');
insert into t values (newid());

声明有效。如果您的 uid 列不是主键或具有唯一索引,则可以将重复键添加到 table.


如果您向 table 添加检查约束,您可以限制并确定问题的根本原因

create table t (
  id uniqueidentifier unique
  CONSTRAINT CHK_uid CHECK (id != '00000000-0000-0000-0000-000000000000')
);
GO
insert into t values ('00000000-0000-0000-0000-000000000000');
insert into t values ('00000000-0000-0000-0000-000000000000');
insert into t values ('00000000-0000-0000-0000-000000000000');
insert into t values (newid());
GO
Msg 547 Level 16 State 0 Line 1
The INSERT statement conflicted with the CHECK constraint "CHK_uid". The conflict occurred in database "fiddle_80c5a5fe96ab4e73ac5dafbb2256025d", table "dbo.t", column 'id'.
Msg 547 Level 16 State 0 Line 2
The INSERT statement conflicted with the CHECK constraint "CHK_uid". The conflict occurred in database "fiddle_80c5a5fe96ab4e73ac5dafbb2256025d", table "dbo.t", column 'id'.
Msg 547 Level 16 State 0 Line 3
The INSERT statement conflicted with the CHECK constraint "CHK_uid". The conflict occurred in database "fiddle_80c5a5fe96ab4e73ac5dafbb2256025d", table "dbo.t", column 'id'.
Msg 3621 Level 0 State 0 Line 1
The statement has been terminated.
Msg 3621 Level 0 State 0 Line 2
The statement has been terminated.
Msg 3621 Level 0 State 0 Line 3
The statement has been terminated.
select * from t
GO
| id                                   |
| :----------------------------------- |
| ddeb79f6-dc0f-4c6a-a065-2083d39a78c1 |

db<>fiddle here