В качестве альтернативного подхода вы можете выполнить все это с помощью значения по умолчанию для столбца, в котором используется объект SEQUENCE
. (К сожалению, вы не можете использовать последовательность в вычисляемом столбце. Не можете объяснить это различие.)
Вы можете создать простую последовательность для вашего окончательного значения, а затем просто объединить остальные значения вместе в определение значения по умолчанию.
Чтобы выполнить цикл для ежегодного сброса, создайте задание агента SQL (или какой-либо другой инструмент планирования), чтобы запустить оператор ALTER
для сброса последовательности.
create sequence dbo.ProjID
AS INTEGER
START WITH 10
INCREMENT BY 1;
GO
create table testseq (
ID bigint identity(1,1) not null,
val int,
testVal nvarchar(10) default ( CONCAT( 'VSP', YEAR( GETDATE() ) % 100 , '-',
RIGHT( CONCAT('000', NEXT VALUE FOR dbo.ProjID), 3)))
);
GO
insert testseq (val) values (1), (2);
select * from testseq;
Результаты:
+----+-----+-----------+
| ID | val | testVal |
+----+-----+-----------+
| 1 | 1 | VSP20-010 |
| 2 | 2 | VSP20-011 |
+----+-----+-----------+
Затем, 1 января каждого года:
ALTER SEQUENCE dbo.ProjID
RESTART;
Поиграйте с этим здесь и посмотрите, что вы думаете.
Rextester Demo .