как увеличить значение целочисленных столбцов на 1 в SQL

92

Мои вопросы

как увеличить значение столбца на 1.

Например, предположим, что столбец IDимеет значения 1,2,3,4, ..

Теперь, когда я обновляю эту таблицу, IDстолбец должен увеличиваться на 1,

Теперь IDстанет 2,3,4,5, ..

Вариндер
источник
любой образец о вас хотите? увеличить значение столбца на 1 для 1 строки? все строки? какая у вас таблица (DDL)? образцы данных (DML)?
Kiquenet

Ответы:

155

Чтобы добавить по одному к каждому значению в таблице ...

UPDATE myTable
SET ID = ID + 1

Чтобы создать новое значение, на одно большее, чем предыдущее максимальное (обычно), используйте столбец с IDENTITY.

gbn
источник
39
Обратите внимание, что это не работает, если значение столбца равно NULL. NULL-столбцы остаются NULL даже после увеличения. Чтобы решить эту проблему, используйте ISNULLследующую инструкцию : UPDATE myTable SET ID = ISNULL(ID, 0) + 1(Взято из этого SO-ответа )
Уве Кейм,
SET [Lic] = [Lic] + @dif. Обратите внимание, что переменная @dif может быть положительной, 0 или отрицательной
Kiquenet
43

Если вы хотите, чтобы для каждой строки автоматически генерировался уникальный номер, это ИДЕНТИЧНОСТЬ согласно ответу Нила.

Если каждый раз при обновлении таблицы вы хотите увеличивать значения (т.е. они не являются ключами):

Update MyTable
Set IDColumn = IDColumn + 1
Where <whatever>
Кадж
источник
8

Попробуй это:

Update Emp set testCount = ISNULL(testCount, 0) + 1 where testId=1
Кишор Сонеджи
источник
1

Вы можете использовать то, IDENTITYчто сделает это за вас.

CREATE TABLE [dbo].[MyTable](
    [MyTableID] [int] IDENTITY(1,1) NOT NULL,
    -- Other columns
)

Когда вы вставите свою первую запись, вы получите Id1.

Нил Найт
источник
1

В Oracle код немного сложнее.

Вам нужно будет создать поле с автоинкрементом с объектом последовательности (этот объект генерирует числовую последовательность).

Используйте следующий синтаксис CREATE SEQUENCE:

CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

Приведенный выше код создает объект последовательности с именем seq_person, который начинается с 1 и будет увеличиваться на 1. Он также будет кэшировать до 10 значений для повышения производительности. Параметр кеширования указывает, сколько значений последовательности будет храниться в памяти для более быстрого доступа.

Чтобы вставить новую запись в таблицу «Персоны», нам нужно будет использовать функцию nextval (эта функция извлекает следующее значение из последовательности seq_person):

INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')

Приведенный выше оператор SQL вставит новую запись в таблицу «Персоны». Столбцу «ID» будет присвоен следующий номер из последовательности seq_person. Столбец «Имя» будет установлен на «Ларс», а столбец «Фамилия» будет установлен на «Монсен».

пиюшдж
источник
1

Вы можете попробовать следующее:

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

INSERT INTO YourTable
        (Identity Column)    
VALUES    
        (@i + 1)
Тони Галлоне
источник