3

我正在从 Docker 映像(https://hub.docker.com/r/microsoft/mssql-server-linux/)运行 MS SQL Server for linux

我在我的日志文件中发现,我的日志表上有许多 PRIMARY KEY 违规,该表有ID uniqueidentifier DEFAULT NEWSEQUENTIALID()列。

例外是:

Exception: System.Data.SqlClient.SqlException: 
Violation of PRIMARY KEY constraint 'PK_Logs'. 
Cannot insert duplicate key in object 'dbo.Logs'. 
The duplicate key value is (20c0423e-f36b-1410-8020-800000000000).

如文档中所述

NEWSEQUENTIALID 是 Windows UuidCreateSequential 函数的包装器。

(来源:https ://docs.microsoft.com/en-us/sql/t-sql/functions/newsequentialid-transact-sql )

那么它在linux上是如何工作的呢?行为是否被破坏,因为生成的 GUID 应该是唯一的,而它们显然不是。

复制步骤

  1. 启动 mssql-server-linux docker 镜像docker run mssql-server-linux(详见https://hub.docker.com/r/microsoft/mssql-server-linux/

  2. 创建表CREATE TABLE SequentialIdTest(ID uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID(), ColA int );

  3. 插入新行 INSERT INTO SequentialIdTest(ColA) VALUES (0);

  4. 重启docker镜像docker restart {CONTAINER_NAME}

  5. 尝试再次插入新行INSERT INTO SequentialIdTest(ColA) VALUES (0);

4

0 回答 0