序列作为列的默认值

End*_*ono 22 t-sql sql-server sequence sql-server-2012

我已经创建了一个序列:

create sequence mainseq as bigint start with 1 increment by 1
Run Code Online (Sandbox Code Playgroud)

如何将此序列用作列的默认值?

create table mytable(
    id      bigint not null default mainseq     -- how?
    code    varchar(20) not null
)
Run Code Online (Sandbox Code Playgroud)

End*_*ono 33

结果很简单:

create table mytable (
    id      bigint not null constraint DF_mytblid default next value for mainseq,
    code    varchar(20) not null
)
Run Code Online (Sandbox Code Playgroud)

或者如果表已经创建:

alter table mytable
add constraint DF_mytblid
default next value for mainseq
for id
Run Code Online (Sandbox Code Playgroud)

(谢谢Matt Strom的更正!)

  • 就像一个小注释可能对某些人来说很明显...因为它使用的是`default`,它仅在不提供值或`null`的情况下适用。用户仍然可以通过在查询中提供值来覆盖自动序列值。 (2认同)
  • 有什么方法可以强制使用默认值? (2认同)

Mat*_*rom 13

ALTER语句不完整.它需要另一个FOR子句来将默认值分配给所需的字段.

ALTER TABLE mytable
ADD CONSTRAINT DF_mytblid
DEFAULT (NEXT VALUE FOR mainseq) FOR [id]
Run Code Online (Sandbox Code Playgroud)