【发布时间】:2012-02-15 12:59:57
【问题描述】:
我的问题是
如何将列的值增加 1。
例如,假设列 ID 的值是 1,2,3,4,..
现在当我更新这个表时,ID 列应该增加 1,
现在ID 将变为 2,3,4,5, ..
【问题讨论】:
-
您想要什么样品?为 1 行增加 1 列的值?所有行?你的桌子是哪张(DDL)?数据样本(DML)?
标签: sql sql-server-2005 sql-update
我的问题是
如何将列的值增加 1。
例如,假设列 ID 的值是 1,2,3,4,..
现在当我更新这个表时,ID 列应该增加 1,
现在ID 将变为 2,3,4,5, ..
【问题讨论】:
标签: sql sql-server-2005 sql-update
【讨论】:
ISNULL statement:UPDATE myTable SET ID = ISNULL(ID, 0) + 1(取自this SO answer)
SET [Lic] = [Lic] + @dif 。注意 @dif 变量可以是正数、0 或负数
如果您希望自动生成每一行的唯一编号,根据 Neil 的回答,这就是 IDENTITY。
如果每次更新表时都想增加值(即它们不是键):
Update MyTable
Set IDColumn = IDColumn + 1
Where <whatever>
【讨论】:
试试这个:
Update Emp set testCount = ISNULL(testCount, 0) + 1 where testId=1
【讨论】:
在 Oracle 中,代码有点复杂。
您必须使用序列对象创建一个自动递增字段(该对象生成一个数字序列)。
使用以下 CREATE SEQUENCE 语法:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
上面的代码创建了一个名为 seq_person 的序列对象,它从 1 开始并递增 1。它还将缓存最多 10 个值以提高性能。缓存选项指定将多少序列值存储在内存中以便更快地访问。
要在“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”。
【讨论】:
您可以使用IDENTITY,它会为您执行此操作。
CREATE TABLE [dbo].[MyTable](
[MyTableID] [int] IDENTITY(1,1) NOT NULL,
-- Other columns
)
当您插入第一条记录时,您将获得 1 个 Id。
【讨论】:
IDENTITY 可能首先以不同的方式解决了这个问题,因为 OP 编号可能是相反的递增的身份。
您可以尝试以下方法:
DECLARE @i INT
SET @i = @@ROWCOUNT + 1
INSERT INTO YourTable
(Identity Column)
VALUES
(@i + 1)
【讨论】:
对于 postgresSQL
UPDATE myTable SET ID = COALESCE(id, 0) + 1;
【讨论】:
更新接受的答案
这样可能会更短。
UPDATE myTable
SET ID += 1
WHERE <Condition>
【讨论】: