创建SQL标识作为主键? - SQL Server

Ser*_*pia 34 sql t-sql sql-server

create table ImagenesUsuario
{
    idImagen int primary key not null IDENTITY
}
Run Code Online (Sandbox Code Playgroud)

这不起作用.我怎样才能做到这一点?

ric*_*ent 68

只需简单的语法更改即可:

 create table ImagenesUsuario (
   idImagen int not null identity(1,1) primary key
 )
Run Code Online (Sandbox Code Playgroud)

通过显式使用"constraint"关键字,您可以为主键约束指定一个特定名称,而不是依赖于SQL Server来自动指定名称:

 create table ImagenesUsuario (
   idImagen int not null identity(1,1) constraint pk_ImagenesUsario primary key
 )
Run Code Online (Sandbox Code Playgroud)

添加"CLUSTERED"关键字,如果根据您对表的使用最有意义(即,特定idImagen的搜索余额和写入量超过了通过其他索引对表进行聚类的好处).


May*_*ayo 8

这类似于我们在团队中生成的脚本.首先创建表,然后应用pk/fk和其他约束.

CREATE TABLE [dbo].[ImagenesUsuario] (
    [idImagen] [int] IDENTITY (1, 1) NOT NULL
)

ALTER TABLE [dbo].[ImagenesUsuario] ADD 
    CONSTRAINT [PK_ImagenesUsuario] PRIMARY KEY  CLUSTERED 
    (
        [idImagen]
    )  ON [PRIMARY] 
Run Code Online (Sandbox Code Playgroud)

  • 我假设我们最初模仿由企业管理器等工具生成的脚本.它确实表明您正在创建主键约束(而不是列属性).它还允许您命名约束.最后,两种方式都有效,所以我想这是一个更容易阅读/维护的优先选择问题. (3认同)
  • 您是否有理由避免在create table语句中创建主键? (2认同)

小智 5

如果您使用T-SQL的是 ,那么您的代码唯一的错误是您使用了大括号{}而不是圆括号()

PS:两者IDENTITYPRIMARY KEY暗示NOT NULL,所以如果你愿意,你可以省略。