如何在SQL中将整数列的值增加1

157

我的问题是

如何将列的值增加1。

例如,假设一列 ID 的值为 1、2、3、4,...

现在当我更新这个表时,ID 列应该增加1,

现在 ID 将变为 2、3、4、5,...


你需要任何关于自己的样例吗?将一行中的列值增加1?还是所有行?你的表(DDL)是哪个?数据样本(DML)是什么? - Kiquenet
8个回答

243

要对表格中的每个值加一...

UPDATE myTable
SET ID = ID + 1

要创建一个比之前的最高值更大的新值(通常情况下),可以使用具有自增长标识列的列。


64
请注意,当列为 NULL 时,此方法无效。即使加了一个值,NULL 列仍然保持为空。如果要解决这个问题,请使用 ISNULL 语句,像这样:UPDATE myTable SET ID = ISNULL(ID, 0) + 1(摘自这个 SO 回答)。 - Uwe Keim
SET [Lic] = [Lic] + @dif。注意,***@dif***变量可以是正数、0或负数。 - Kiquenet
此方法产生了以下错误:“SQL错误:唯一约束失败:{table}.id”。除了'id'之外,所有字段都可以更改。这是一个已知的问题。我真的很想知道为什么会选择这个解决方案…… - undefined

59

如果你想自动生成每行的唯一编号,可以按照Neil的回答使用IDENTITY。

如果每次更新表格时你想增加这些值(即它们不是键):

Update MyTable
Set IDColumn = IDColumn + 1
Where <whatever>

10

试试这个:

Update Emp set testCount = ISNULL(testCount, 0) + 1 where testId=1

8

已接受答案的更新

可能更简短,像这样。

UPDATE myTable
SET ID += 1
WHERE <Condition>


3

对于PostgreSQL

UPDATE myTable SET ID = COALESCE(id, 0) + 1;

1
你可以尝试以下方法:

DECLARE @i INT
SET @i = @@ROWCOUNT + 1

INSERT INTO YourTable
        (Identity Column)    
VALUES    
        (@i + 1)

0
你可以使用IDENTITY,它会为你完成这个任务。
CREATE TABLE [dbo].[MyTable](
    [MyTableID] [int] IDENTITY(1,1) NOT NULL,
    -- Other columns
)

当您插入第一条记录时,您将获得一个Id为1。

这个问题是关于更新现有行中的列,而不是在插入新行时递增ID的问题。 - Barmar
但是,@Barmar提出的观察值得向OP提出,看起来使用IDENTITY可能已经在第一时间以不同的方式解决了这个问题,因为OP的数字可能是递增标识的反向。 - Chris Schaller

0
在Oracle中,代码会有一点棘手。
您需要使用序列对象创建自动递增字段(该对象生成数字序列)。
请使用以下CREATE SEQUENCE语法:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

上面的代码创建了一个名为seq_person的序列对象,它从1开始递增1。它还将缓存最多10个值以提高性能。cache选项指定将在内存中存储多少序列值以实现更快的访问。
要向“Persons”表中插入新记录,我们必须使用nextval函数(此函数检索seq_person序列的下一个值)。
INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')

上述SQL语句将向“Persons”表中插入一条新记录。 “ID”列将被分配来自seq_person序列的下一个数字。 “FirstName”列将设置为“Lars”,而“LastName”列将设置为“Monsen”。

SQL Server现在也支持这个功能,序列是手动执行相同操作的优越解决方案。https://www.sqlservertutorial.net/sql-server-basics/sql-server-sequence/ - Chris Schaller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接