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

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() 来获取该值。我知道这有点偏离主题,但它对于您理解如何在 SQL Server 中使用身份非常重要。相信我,您不想解决向其提供错误身份值的相关记录的问题。在被发现之前,这种情况可能会悄悄地发生几个月的问题,并且之后几乎不可能修复数据。

正如其他人提到的:将 IDENTITY 属性添加到该列,并将其设为主键。

然而,MSSQL 的 IDENTITY 和 MySQL 的 AUTO_INCRMENT 之间存在差异:

  • MySQL要求为Auto_increment列定义一个唯一的约束(通常以主键的形式)。
    MSSQL没有这样的要求。
  • MySQL 允许您手动将值插入到 AUTO_INCRMENT 列中。
    MSSQL可防止您手动将值插入身份列中;如果需要,您可以通过在插入之前在命令上发出“ sidentity_insert tableName”来覆盖此问题。
  • MySQL 允许您更新 AUTO_INCRMENT 列中的值。
    MSSQL拒绝在身份列中更新值。

只需将该字段设置为 身份字段.

声明该字段为identity

如上所述,使用 IDENTITY 字段。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top