Как сделать поле identity sql

Добавил пользователь Евгений Кузнецов
Обновлено: 05.10.2024

Автоматическое приращение позволяет автоматически генерировать уникальное число при вставке новой записи в таблицу.

Часто поле первичного ключа, которое мы хотели бы создавать автоматически при каждой вставке новой записи.

Синтаксис для MySQL

Следующая инструкция SQL определяет, что столбец "Personid", который должен быть полем первичного ключа с автоматическим приращением в поле первичного ключа в таблице "Persons":

CREATE TABLE Persons (
Personid int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (Personid)
);

MySQL использует ключевое слово AUTO_INCREMENT для выполнения функции автоматического приращения.

По умолчанию начальное значение для AUTO_INCREMENT равно 1, и оно будет увеличиваться на 1 для каждой новой записи.

Чтобы последовательность AUTO_INCREMENT начиналась с другого значения, используйте следующую инструкцию SQL:

Чтобы вставить новую запись в таблицу "Persons", нам не нужно будет указывать значение для столбца "Personid" (уникальное значение будет добавлено автоматически):

Приведенная выше инструкция SQL вставит новую запись в таблицу "Persons". Столбцу "Personid" будет присваивается уникальное значение. Столбец "FirstName" будет иметь значение "Lars", а столбец "LastName"- "Monsen".

Синтаксис для SQL Server

Следующая инструкция SQL определяет столбец "Personid" как поле первичного ключа автоинкремента в таблице "Persons":

CREATE TABLE Persons (
Personid int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);

MS SQL Server использует ключевое слово IDENTITY для выполнения функции автоматического приращения.

В приведенном выше примере начальное значение идентификатора равно 1, и оно будет увеличиваться на 1 для каждой новой записи.

Совет: Чтобы указать, что столбец "Personid" должен начинаться со значения 10 и увеличиваться на 5, измените его на IDENTITY(10,5).

Чтобы вставить новую запись в таблицу "Persons", нам не нужно будет указывать значение для столбца "Personid" (уникальное значение будет добавлено автоматически):

Приведенная выше инструкция SQL вставит новую запись в таблицу" Persons". Столбцу "Personid" будет присвоено уникальное значение. Столбец "FirstName" будет иметь значение "Lars", а столбец "LastName"- "Monsen".

Синтаксис для Access

Следующая инструкция SQL определяет столбец "Personid" как поле первичного ключа автоинкремента в таблице "Persons":

CREATE TABLE Persons (
Personid AUTOINCREMENT PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);

MS Access использует ключевое слово AUTOINCREMENT для выполнения функции автоматического приращения.

По умолчанию начальное значение для AUTOINCREMENT равно 1, и оно будет увеличиваться на 1 для каждой новой записи.

Совет: Чтобы указать, что столбец "Personid" должен начинаться со значения 10 и увеличиваться на 5, измените значение autoincrement на AUTOINCREMENT(10,5).

Чтобы вставить новую запись в таблицу "Persons", нам не нужно будет указывать значение для столбца "Personid" (уникальное значение будет добавлено автоматически):

Приведенная выше инструкция SQL вставит новую запись в таблицу "Persons". Столбцу "Personid" будет присвоено уникальное значение. Столбец "FirstName" будет иметь значение "Lars", а столбец "LastName" - "Monsen".

Синтаксис для Oracle

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

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

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

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

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

Приведенная выше инструкция SQL вставит новую запись в таблицу "Persons". Столбецу "Personid" будет присвоен следующий номер из последовательности "seq_person". Столбец "FirstName" будет иметь значение "Lars", а столбец "LastName"- "Monsen".

Вы можете определить seed (начальное значение) в качестве первого параметра, и step (шаг) в качестве второго - так выбрать то, что имеет смысл для вас; как seed = 1, так и step = 1, по-видимому, используются в основном по умолчанию.

Столбец будет добавлен и заполнен значениями, когда он будет создан.

Похоже, вы хотите реализовать row_number() который увеличит значение id на основе количества значений code которые у вас есть:

Использование row_number() позволит вам вычислить значение при запросе данных в вашей таблице. См. SQL Fiddle with Demo.

Если вы хотите обновить таблицу этим значением, вы можете использовать что-то вроде следующего:

Сохранение этого значения в вашей таблице будет сложно поддерживать, если вы продолжаете добавлять новые строки для каждого code , может быть проще реализовать row_number() при запросе данных.

появилось потребность вставить несколько значений в поле IDENTITY, можно ли это сделать ?
и если можно - то как ?

SET IDENTITY_INSERT [ database. [ owner. ] ] < table >

В моём случае это Syntax Error или Access Violation ?
И что нада сделать в том или в другом случае ?
(itity поле это то в которое я пытаюсь сунуть -10 и -20)

к примеру aaa - имя таблицы
SET IDENTITY_INSERT aaa ON
insert into aaa values (-10,'blah 1','')
insert into aaa values (-20,'blah 2','')
SET IDENTITY_INSERT aaa OFF
Только я не знаю как поведет себя MSSQL когда ты попытаешься отрицательные значения запихнуть в itity поле

не канает почему то
пишет

An explicit value for the itity column in table 'aaa' can only be specified when a column list is used and IDENTITY_INSERT is ON.

в insert-е после имени таблицы укажи имена колонок

не понял как это ? поподробнее пожалуйста.
В общем есть таблица

как мне в неё вставить строку типа (-10,' blah ', 'blah') ?

insert into aaa (id, field1, field2) values (-10, 'blah', 'blah');

SET IDENTITY_INSERT aaa ON
insert into aaa (id, field1, field2) values (-10, 'blah', 'blah');
SET IDENTITY_INSERT aaa OFF
Ты чем пользуешься?
Я запустил SQL Query Analyzer.
При попытке сделать
insert into aaa (id, field1, field2) values (-10, 'blah', 'blah');
он ругается и говорит, что надо сделать .
(Server: Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for itity column in table 'aaa' when IDENTITY_INSERT is set to OFF.)

SET IDENTITY_INSERT aaa ON
GO
insert into aaa (id, field1, field2) values (-10, 'blah', 'blah')
SET IDENTITY_INSERT aaa OFF
GO

Спасибо, получилось
Только вот непонятно чем запись
insert into aaa (id, field1, field2) values (-10, 'blah', 'blah')
в данном случае принципиально отличаеццо от
insert into aaa values (-10, 'blah', 'blah')
и почему с 1-й работает а со 2-й нет

заморочки t - sql не всегда очевидны и понятны, поэтому надо всегда юзать хелп, когда очевидное решение не является верным

во
а где этот хелп то кстате ?
в Sql query analizer'е при выборе чего либо из меню хелп ничего не происходит .

Shift-F1 пробовал? Хелп ставится с SQL Server, поищи Books Online.

Только вот непонятно чем запись
insert into aaa (id, field1, field2) values (-10, 'blah', 'blah')
в данном случае принципиально отличаеццо от
insert into aaa values (-10, 'blah', 'blah')
и почему с 1-й работает а со 2-й нет

я так понимаю что вторая запись неверна в принципе
потмоу как верна вот такая запись:
insert into aaa values ('blah', 'blah')
можешь проверить
тойсть тама как будто 2 столбца
это сделано специально и очень логично

это было б логично , если б itity_insert is OFF ,а так не совсем логично

ну просто он не рюхает такой ситуации, что какая то там опция включена
ничего страшного
обычно все СУБД не блещут юзабильностью

Почему возникает ошибка при вставке, когда IDENTITY_INSERT установлено в OFF?

Как включить его правильно в SQL Server 2008? Это с помощью SQL Server Management Studio?

Я запустил этот запрос:

ОТВЕТЫ

Ответ 1

Невозможно вставить явное значение для столбца идентификатора в таблице "sometableWithIdentity", если для параметра IDENTITY_INSERT установлено значение OFF.

Ответ 2

У меня возникла проблема, когда она не позволяла мне вставлять ее даже после установки IDENTITY_INSERT ON.

Проблема заключалась в том, что я не указывал имена столбцов и по какой-то причине ему это не понравилось.

Итак, в основном сделайте полные значения INSERT INTO tbl (cols) (vals)

Ответ 3

Импорт Вы должны писать столбцы в инструкции INSERT

Ответ 4

Решение:

Установите IDENTITY_INSERT в положение ON.

Вставьте данные клиентов в таблицу Customer.

Установите IDENTITY_INSERT в положение OFF.

Ответ 5

Я знаю, что это более старый поток, но я просто столкнулся с этим. Если пользователь пытается запустить вставки в столбце Identity после некоторого другого сеанса Set IDENTITY_INSERT ON, он должен получить вышеуказанную ошибку.

Установка значения вставки идентификатора и последующих команд вставки DML должна выполняться одним и тем же сеансом.

Здесь @Beginner устанавливал идентификатор Insert ON отдельно, а затем запускал вставки из своего приложения. Вот почему он получил следующую ошибку:

Ответ 6

Вероятно, если у вас есть поле PRIMARY KEY, и вы вставляете значение, которое дублируется, или вы имеете флаг INSERT_IDENTITY, установленный на

Ответ 7

Кажется необходимым поставить SET IDENTITY_INSERT Database.dbo.Baskets ON; перед каждым отправляющим SQL INSERT пакетом.

Ответ 8

Вам нужно добавить команду "go" после установки вставки идентификатора. Пример:

Читайте также: