как увеличить значение целочисленных столбцов на 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.


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>


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. Столбец «Имя» будет установлен на «Ларс», а столбец «Фамилия» будет установлен на «Монсен».


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.