SqlServer使用类似MySql的自动增量主键创建表

SqlServer使用类似MySql的自动增量主键创建表,mysql,sql-server,auto-increment,Mysql,Sql Server,Auto Increment,我想在SqlServer中创建一个表,在插入时添加一个自动递增的主键。这应该是一个类似于MySql自动增量功能的自动增量id。(下文) 有没有一种方法可以在不创建插入触发器的情况下执行此操作?只需像这样将字段设置为 create table foo ( user_id int not null identity, name varchar(50) ) 将字段声明为identity正如其他人所说,只需设置identity选项。如上所述,使用identity字段 CREATE TA

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

有没有一种方法可以在不创建插入触发器的情况下执行此操作?

只需像这样将字段设置为

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

将字段声明为identity

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

如上所述,使用identity字段

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

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

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

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

CREATE TABLE user
(
  TheKey int IDENTITY(1,1) PRIMARY KEY,
  Name varchar(50)
)
然而,MSSQL的标识和MySQL的自动增量之间存在差异:

  • MySQL需要一个唯一的 约束(通常以 主键)可以为 自动增量列。
    MSSQL没有这样的要求
  • MySQL允许您手动将值插入到自动增量列中。
    MSSQL阻止您手动将值插入标识中 栏目;如果需要,您可以覆盖 这是通过发出一个“集合”来实现的 标识\u在“”上插入表名 插入之前的命令
  • MySQL允许您更新自动增量列中的值。
    MSSQL拒绝更新自动增量列中的值 标识列

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

完全正确,为什么另一个被勾选为正确答案?这不是问题的答案。它完全忽略了自动递增这一主键问题。为什么还要打勾?