Вы должны использовать Dynami c SQL, чтобы найти текущий максимальный идентификатор и создать или изменить объекты SEQUENCE. Как то так:
CREATE OR ALTER PROCEDURE EBPP_CORE.CREATE_OR_ALTER_SEQUENCE
@sequence_name nvarchar(128),
@table_name nvarchar(128)
AS
/*
drop table if exists foo
go
create table foo(id int)
exec EBPP_CORE.CREATE_OR_ALTER_SEQUENCE 'foo_seq','foo'
insert into foo(id) values (3)
exec EBPP_CORE.CREATE_OR_ALTER_SEQUENCE 'foo_seq','foo'
*/
BEGIN
DECLARE @MAX_ID_VAL bigint;
DECLARE @sequence_exist bigint;
declare @sql nvarchar(max) = concat('select @MAX_ID_VAL = MAX(id) + 1 FROM ', quotename(@table_name));
print @sql;
exec sp_executesql @sql, N'@MAX_ID_VAL bigint output', @MAX_ID_VAL=@MAX_ID_VAL output;
set @MAX_ID_VAL = coalesce(@MAX_ID_VAL,1)
SELECT @sequence_exist = COUNT(*) FROM sys.sequences WHERE name = @sequence_name;
IF @sequence_exist>0
BEGIN
set @sql = concat('ALTER SEQUENCE ', quotename(@sequence_name), ' RESTART WITH ', @MAX_ID_VAL) ;
print @sql;
exec (@sql);
END
ELSE
BEGIN
set @sql = concat('CREATE SEQUENCE ', quotename(@sequence_name), ' START WITH ', @MAX_ID_VAL,' INCREMENT BY 1') ;
print @sql;
exec (@sql);
END
END