2008-09-17 6 views
11

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

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

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

ответ

21

Как это

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

Это не ответ на вопрос. Он игнорирует автоинкремент, проблема с первичным ключом.Почему он даже галочки? – 2015-08-25 02:04:05

1

объявить поле, чтобы быть тождество

0

Как уже говорили другие, просто установите опцию Подлинность.

1

Как указано выше, используйте поле IDENTITY.

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

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

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

Правильно, почему другой помечается как правильный ответ? – 2015-08-25 02:03:23

4

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

Есть, однако, различия между IDENTITY MSSQL и AUTO_INCREMENT в MySQL:

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

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