如何从另一个表的最大值获取序列起始值

时间:2019-06-23 08:09:15

标签: sql sql-server tsql sql-server-2012 sequence

我正在尝试在表中插入一堆值,但是它没有IDENTITY列,因此我需要在该字段中插入一个唯一值。 并且序列号应基于同一字段中存在的先前值开始。

让我说我有一张这样的桌子

create table testTable (id int, fieldA varchar (20))
insert into testTable 
values (6,'Nick'),(7,'Tom')

现在我在ID字段中插入的下一个值应为8,下一行应为9,依此类推...

下面是我创建的序列;并且不起作用

CREATE SEQUENCE testTable_seq
declare @maxy int = ((select max(ID) from testTable) + 1)
START WITH @maxy
INCREMENT BY   1

我希望下面的插入内容应该从我创建的序列中获取下一个值,或者只是从先前的ID字段中获取下一个序列号

insert into testTable 
values (testTable_seq.next value,'Harry')

1 个答案:

答案 0 :(得分:4)

您无法执行此操作,如果您在文档 CREATE SEQUENCE 中看到了自变量,则说明START WITH的值应为常数,与INCREMENT BYMINVALUEMAXVALUE

  

从常量开始

我不明白您为什么要创建一个SEQUENCE以便将值插入表中,而且MAX()并不会如您所愿,相反,您可以简单地

CREATE TABLE TestTable(
  ID INT IDENTITY(1, 1) NOT NULL,
  AColumn VARCHAR(20),
  CONSTRAINT PK_TestTable_ID PRIMARY KEY(ID)
); 
相关问题