11

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

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

有没有办法在不创建插入触发器的情况下做到这一点?

4

8 回答 8

21

像这样

create table foo  
(  
user_id int not null identity,  
name varchar(50)  
)
于 2008-09-17T16:29:30.743 回答
10

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

CREATE TABLE user
(
  TheKey int IDENTITY(1,1) PRIMARY KEY,
  Name varchar(50)
)
于 2008-09-17T18:22:30.050 回答
10

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

于 2008-10-28T19:56:53.887 回答
4

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

但是,MSSQL 的 IDENTITY 和 MySQL 的 AUTO_INCREMENT 之间存在差异:

  • MySQL 要求为 AUTO_INCREMENT 列定义唯一约束(通常以主键的形式)。
    MSSQL 没有这样的要求。
  • MySQL 允许您手动将值插入到 AUTO_INCREMENT 列中。
    MSSQL 阻止您手动将值插入 IDENTITY 列;如果需要,您可以通过在插入之前发出“SET IDENTITY_INSERT tablename ON”命令来覆盖它。
  • MySQL 允许您更新 AUTO_INCREMENT 列中的值。
    MSSQL 拒绝更新 IDENTITY 列中的值。
于 2008-09-17T19:18:45.047 回答
2

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

于 2008-09-17T16:29:17.980 回答
1

将字段声明为身份

于 2008-09-17T16:29:32.723 回答
1

如上所述,使用 IDENTITY 字段。

CREATE TABLE foo
(
user_id int IDENTITY(1,1) NOT NULL,
name varchar(50)
)
于 2008-09-17T17:55:57.103 回答
0

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

于 2008-09-17T17:52:17.597 回答