Учитывая следующую простую структуру таблицы (SQL Server 2008), я хочу иметь возможность поддерживать уникальность моего столбца числовой последовательности, но я хочу иметь возможность обновлять это значение для любой заданной записи.
CREATE TABLE MYLIST(
ID int NOT NULL IDENTITY(1, 1)
, TITLE varchar(50) NOT NULL
, SEQUENCE int NOT NULL
, CONSTRAINT pk_mylist_id PRIMARY KEY(ID)
, CONSTRAINT uq_mylist_sequence UNIQUE(SEQUENCE)
);
Мой интерфейс позволяет мне смешивать порядок элементов, и Я буду знать перед выполнением обновления, какая непересекающаяся последовательность должна быть в , но как мне выполнить обновление без столкнулись с нарушением уникального ограничения?
Например, скажем, у меня есть эти записи:
ID TITLE SEQUENCE
1 APPLE 1
2 BANANA 2
3 CHERRY 3
И я хочу обновить их порядковые номера следующим образом:
ID TITLE SEQUENCE
1 APPLE 3
2 BANANA 1
3 CHERRY 2
Но на самом деле я мог бы иметь дело с парой дюжин предметов. Порядковые номера не должны пересекаться. Я думал о попытке использовать триггеры или временно отключить ограничение, но это может создать больше проблем. Я использую C # и LINQ-to-SQL, но открыт только для решений в области баз данных.