鉴于以下简单的表结构(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,但我对严格的数据库解决方案持开放态度。