2

例如,您有一个表,您在其中定义其列之一的定义以使用如下序列号

CREATE TABLE Sales.MyOrders
(
orderid INT NOT NULL
CONSTRAINT PK_MyOrders_orderid PRIMARY KEY
CONSTRAINT DFT_MyOrders_orderid
DEFAULT(NEXT VALUE FOR Sales.SeqOrderIDs),
.....

如果您在此表中手动插入一些值,您明确地说 orderid = 1;

序列号也会更新吗?

只是我认为如果没有主键违规的可能性更高

4

1 回答 1

2

不,序列号也不会更新。您可以按照以下 3 个简单步骤轻松检查

1)创建序列器和表:

CREATE SEQUENCE S as int;

CREATE TABLE MyOrders
(
n int,
orderid INT NOT NULL
CONSTRAINT DFT_MyOrders_orderid
DEFAULT(NEXT VALUE FOR S)
);

2)插入一些值:

insert into myorders ( n) values (1);
insert into myorders ( n) values (2);
insert into myorders ( n, orderid) values (3,3);
insert into myorders ( n) values (4);

3) 检查结果:

| N |     ORDERID |
----|-------------|--
| 1 | -2147483648 |
| 2 | -2147483647 |
| 3 |           3 |   <-- by hand entry
| 4 | -2147483646 |   <-- no gap

结论

DEFAULT子句仅在没有为列分配值(null)时执行。如果您为 column 提供值,则不会调用 sequencer。

于 2013-08-27T09:02:24.170 回答