Вы можете добавить вычисляемый столбец, который выводит число на основе года.Вам просто нужно запустить скрипт ниже в начале нового года.Обратите внимание, что при откате транзакции в столбце идентификаторов будут пропуски.(и вставки в предыдущем году также создадут большие пробелы.)
-- test table & inserts
create table Students (Id int identity, year int, name varchar(20), StudentId int null)
insert into Students (year, name) values (2010, 'student1'), (2011, 'student1'), (2011, 'student2')
-- run this every year
EXEC ('ALTER TABLE Students DROP COLUMN StudentId ')
declare @count int, @sql varchar(max), @year int
declare c cursor local read_only
for select year + 1, max(Id) from Students group by year
open c
fetch next from c into @year, @count
select @sql = 'when year = ' + convert(varchar(10), @year - 1) + ' then Id '+ CHAR(13) + CHAR(10)
while @@FETCH_STATUS = 0
begin
select @sql = @sql + 'when year = ' + convert(varchar(10), @year) + ' then Id - ' + convert(varchar(10), @count) + CHAR(13) + CHAR(10)
fetch next from c into @year, @count
end
close c
deallocate c
select @sql = 'CASE ' + CHAR(13) + CHAR(10) + @sql + ' ELSE 0 END'
select @sql = 'ALTER TABLE Students ADD StudentId AS ' + isnull(@sql, 'Id') + ' PERSISTED'
exec (@sql)