gpt4 book ai didi

sql - 使用唯一约束更新数据库记录

转载 作者:行者123 更新时间:2023-12-01 13:57:49 25 4
gpt4 key购买 nike

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

最佳答案

显而易见的方法是批量编写。在内部,SQL 将推迟约束检查,因此中间唯一性无关紧要。

逐行写入没有意义并导致您遇到的问题。

您可以将其更改为写入临时表,然后在最后“刷新”结果,甚至首先检查临时表的唯一性。

DECLARE @NewSeq TABLE (ID int, NewSeq int)

INSERT @NewSeq (ID, NewSeq) VALUES (1, 3)
INSERT @NewSeq (ID, NewSeq) VALUES (2, 1)
INSERT @NewSeq (ID, NewSeq) VALUES (3, 2)

UPDATE
M
SET
SEQUENCE = NewSeq
FROM
MYLIST M
JOIN
@NewSeq N ON M.ID = N.ID

关于sql - 使用唯一约束更新数据库记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4798272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com