2008-09-17 132 views
11

我想在SqlServer中創建一個表,在插入時添加一個自動遞增的主鍵。這應該是一個類似於MySql auto_increment功能的自動增加的id。 (以下)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

OP請求一個自動遞增的主鍵。 IDENTITY關鍵字本身不會使列成爲主鍵。

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

完全正確,爲什麼另一個人打勾正確答案? – 2015-08-25 02:03:23

4

正如其他人所說的:將IDENTITY屬性添加到列中,並將其設置爲主鍵。

有,但是,MSSQL的身份和MySQL的AUTO_INCREMENT之間的差異:

  • MySQL的要求一個唯一 約束(通常在 主鍵的形式)用於 AUTO_INCREMENT列來定義。
    MSSQL沒有這樣的要求。
  • MySQL允許您手動將值插入AUTO_INCREMENT列。
    MSSQL阻止您手動將值插入IDENTITY 列;如果需要,可以通過在插入之前發出「SET IDENTITY_INSERT表名ON」 命令來覆蓋 。
  • MySQL允許您更新AUTO_INCREMENT列中的值。
    MSSQL拒絕更新IDENTITY列中的值。
9

他們已經回答了您的問題,但我想爲使用標識列的新用戶添加一點建議。有時您必須返回剛剛插入的身份的值,以便您可以插入到相關的表中。許多消息來源會告訴你使用@@ identity來獲得這個值。如果你想保持數據的完整性,在任何情況下你都不應該使用@@身份。如果將其中一個添加到另一個表中,它將給出在觸發器中創建的標識。由於您無法保證@@身份的價值永遠是正確的,因此最好不要使用@@身份。使用scope_identity()來取代這個值。我知道這有點偏離主題,但重要的是你瞭解如何使用SQL Server的身份。相信我,你不想糾正給他們提供錯誤身份價值的相關記錄問題。這種情況在數月之前可能悄然出錯,幾個月後幾乎不可能修復數據。

相關問題