NEWSEQUENTIALID() не работает в SQL Server для Linux?
Я использую MS SQL Server для Linux из образа Docker ( https://hub.docker.com/r/microsoft/mssql-server-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 должны быть уникальными, а они явно нет.
Шаги воспроизведения
запустите образ докера mssql-server-linux
docker run mssql-server-linux
(обратитесь к https://hub.docker.com/r/microsoft/mssql-server-linux/ за подробностями)Создать таблицу
CREATE TABLE SequentialIdTest(ID uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID(), ColA int );
Вставить новую строку
INSERT INTO SequentialIdTest(ColA) VALUES (0);
перезапустить образ докера
docker restart {CONTAINER_NAME}
Попробуйте вставить новую строку снова
INSERT INTO SequentialIdTest(ColA) VALUES (0);