首页 > 解决方案 > 如何插入选择从变量开始的序列?

问题描述

这里有一个关于 SO 的问题,从那时起就被删除了。但是,当我在研究解决它的方法时,我正在编写一个避免使用标识列并使用序列本身的脚本:

create table table1(Id int primary key, group_id int, Name varchar(64))
insert into table1(Id, group_id, Name) values (1, 1, 'a'), (2, 1, 'b'), (4, 1, 'c'), (8, 1, 'd')
declare @MaxId as int
select @MaxId = max(Id) + 1 from table1
declare @sql varchar(max)
set @sql = N'CREATE SEQUENCE MySequence  AS INTEGER START WITH ' + cast(@maxId as varchar(10))
exec(@sql)
insert into table1(id, group_id, Name)
select next value for MySequence, 2, Name
from table1
where group_id = 1;

这实际上是有效的,即它成功地插入了四个动态生成的 id 记录。

然而,部分

declare @sql varchar(max)
set @sql = N'CREATE SEQUENCE MySequence  AS INTEGER START WITH ' + cast(@maxId as varchar(10))
exec(@sql)

在我看来,这是非常违反直觉和骇人听闻的。

问题:有没有办法定义从变量值开始的序列而不生成文本并执行它?

标签: sql-serversequence

解决方案


CREATE SEQUENCE 语法文档显示常量是必需的,因此您不能在 DDL 语句中指定变量。


推荐阅读