Обновление многострочных строк в sqllite вызывает исключение уникального ограничения - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть таблица со столбцом, для которого я хочу установить уникальное ограничение.Затем я хочу выполнить запрос, который обновляет значение этого столбца, и конечный результат не должен нарушать ограничение уникальности.Это прекрасно работает в mssql, но sqllite славно не справляется с этой задачей, выдавая уникальное исключение ограничения

Вот пример

Create table page (
    id BLOB NOT NULL CONSTRAINT "PK_Page" PRIMARY KEY,
    Name nvarchar(200),
    ParentId BLOB NOT NULL,
    Placement int
);

CREATE UNIQUE INDEX "IX_Page_ParentId_Placement" ON "Page" ("ParentId", "Placement");

insert into page (id,name,parentid,placement) values ('id1','A','r',1);
insert into page (id,name,parentid,placement) values ('id2','A','r',2);
insert into page (id,name,parentid,placement) values ('id3','A','r',3);
insert into page (id,name,parentid,placement) values ('id4','A','r',4);


update page set placement = placement + 1;

https://www.db -fiddle.com / f / rSz1iU1jkcDBdahqJNqGat/ 0

Изменение порядка операторов вставки работает, но это не сработает в производстве.

Есть ли решение для этого?

1 Ответ

1 голос
/ 05 апреля 2019

Один метод заключается в использовании двух обновлений:

update page
    set placement = - (placement + 1);

update page
    set placement = - (placement + 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...