SQLServer создает таблицу с MySQL, подобную первичному ключу auto_increment

StackOverflow https://stackoverflow.com/questions/85034

Вопрос

Я хочу создать таблицу в SQLServer, которая добавит при вставке автоматически увеличиваемый первичный ключ.Это должен быть идентификатор с автоинкрементом, аналогичный функциональности MySQL auto_increment.(Ниже)

create table foo  
(  
user_id int not null auto_increment,  
name varchar(50)  
)  

Есть ли способ сделать это без создания триггера вставки?

Это было полезно?

Решение

Вот так

create table foo  
(  
user_id int not null identity,  
name varchar(50)  
)

Другие советы

OP запросил автоматически увеличиваемый первичный ключ.Ключевое слово IDENTITY само по себе не делает столбец первичным ключом.

CREATE TABLE user
(
  TheKey int IDENTITY(1,1) PRIMARY KEY,
  Name varchar(50)
)

Они ответили на ваш вопрос, но я хочу добавить один совет для кого-то нового по использованию столбцов идентификаторов.Бывают случаи, когда вам приходится возвращать значение только что вставленного идентификатора, чтобы вы могли вставить его в связанную таблицу.Многие источники посоветуют вам использовать @@identity для получения этого значения.Ни при каких обстоятельствах вы никогда не должны использовать @@identity, если хотите сохранить целостность данных.Это выдаст идентификатор, созданный в триггере, если один из них будет добавлен для вставки в другую таблицу.Поскольку вы не можете гарантировать, что значение @@identity всегда будет правильным, лучше никогда не использовать @@identity .Вместо этого используйте scope_identity(), чтобы получить это значение.Я знаю, что это немного не по теме, но это важно для вашего понимания того, как использовать identity с SQL Server.И поверьте мне, вы не хотели устранять проблему, связанную с тем, что связанным записям было присвоено неправильное идентификационное значение.Это то, что может незаметно пойти не так в течение нескольких месяцев, прежде чем будет обнаружено, и практически невозможно исправить данные впоследствии.

Как уже упоминали другие:добавьте атрибут IDENTITY в столбец и сделайте его первичным ключом.

Существуют, однако, различия между ИДЕНТИФИКАТОРОМ MSSQL и AUTO_INCREMENT MySQL:

  • MySQL требует, чтобы для столбца AUTO_INCREMENT было определено уникальное ограничение (часто в форме первичного ключа).
    В MSSQL нет такого требования.
  • MySQL позволяет вам вручную вставлять значения в столбец AUTO_INCREMENT.
    В MSSQL мешает вам вводить вручную значение в тождество колонки;при необходимости вы можете переопределить это, выполнив команду "SET IDENTITY_INSERT tablename ON" перед вставкой.
  • MySQL позволяет вам обновлять значения в столбце AUTO_INCREMENT.
    MSSQL отказывается обновлять значения в столбце IDENTITY.

Просто установите поле в качестве поле идентификации.

объявите поле идентификатором

Как было рекомендовано выше, используйте поле ИДЕНТИФИКАЦИИ.

CREATE TABLE foo
(
user_id int IDENTITY(1,1) NOT NULL,
name varchar(50)
)

Как уже говорили другие, просто установите параметр Идентификации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top