SqlServer使用MySql创建表,如auto_increment主键

时间:2008-09-17 16:28:49

标签: mysql sql-server auto-increment

我想在SqlServer中创建一个表,在插入时添加一个自动递增的主键。这应该是一个类似于MySql auto_increment功能的自动增量id。 (下)

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

有没有办法在不创建插入触发器的情况下执行此操作?

8 个答案:

答案 0 :(得分:21)

喜欢这个

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

答案 1 :(得分:9)

OP请求自动递增的主键。 IDENTITY关键字本身不会使列成为主键。

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

答案 2 :(得分:9)

他们已回答了您的问题,但我想为新用户使用标识列添加一些建议。有时您必须返回刚刚插入的标识的值,以便您可以插入到相关的表中。许多消息来源会告诉您使用@@ identity来获取此值。如果您想保持数据完整性,在任何情况下都不应该使用@@ identity。如果添加其中一个插入到另一个表,它将给出在触发器中创建的标识。由于您无法保证@@ identity的值始终是正确的,因此最好永远不要使用@@ identity。使用scope_identity()来获取此值。我知道这有点偏离主题,但对于理解如何在SQL Server中使用标识非常重要。并且相信我,你不想解决相关记录的问题,这些记录具有错误的身份价值。这可能会在发现之前几个月悄然出错,之后几乎无法修复数据。

答案 3 :(得分:4)

正如其他人所说:将IDENTITY属性添加到列中,并使其成为主键。

然而,MSSQL的IDENTITY与MySQL的AUTO_INCREMENT之间存在差异:

  • MySQL要求一个独特的 约束(通常以a的形式) 主键)被定义为 AUTO_INCREMENT列。
    MSSQL没有这样的要求。
  • MySQL允许您手动将值插入AUTO_INCREMENT列。
    MSSQL阻止您手动将值插入IDENTITY 柱;如果需要,你可以覆盖 这通过发布“SET IDENTITY_INSERT表名ON“ 插入前的命令。
  • MySQL允许您更新AUTO_INCREMENT列中的值。
    MSSQL拒绝更新中的值 IDENTITY专栏。

答案 4 :(得分:2)

只需将字段设置为identity field

答案 5 :(得分:1)

声明该字段为身份

答案 6 :(得分:1)

如上所述,使用IDENTITY字段。

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

答案 7 :(得分:0)

正如其他人所说,只需设置身份选项。