Учитывая следующую простую структуру таблицы (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, но открыт исключительно для баз данных.