Я вижу два варианта:
(1) если в вашей таблице, в которую вы вставляете данные, есть столбец DATE
или DATETIME
, в котором указан "правильный" год, вы можете простодобавить сохраненный вычисляемый столбец в вашу таблицу - что-то вроде:
ALTER TABLE dbo.YourTable
ADD PKID AS RIGHT(CAST(YEAR(DateColumn) AS CHAR(4)), 2) + '-' +
RIGHT('00000' + CAST(ID AS VARCHAR(5)), 5) PERSISTED
Предполагая, что ID
- это столбец INT IDENTITY
, который автоматически генерирует последовательные числа, и вы хотите назвать новый столбец PKID
(при необходимости измените).
Поскольку это вычисляемый столбец persisted , он вычисляется один раз - при вставке строки - и может быть проиндексирован и использован в качестве первичного ключа.
(2) Если в вашей таблице нет ничего похожего на столбец даты, то единственным вариантом будет иметь для этой таблицы триггер AFTER INSERT
, который делает что-то вроде этого (опять же, если у вас есть столбец ID INT IDENTITY
для предоставления автоинкрементных чисел):
CREATE TRIGGER trgInsert ON dbo.YourTable
AFTER INSERT
AS
BEGIN
DECLARE @YearPrefix CHAR(2)
SET @YearPrefix = RIGHT(CAST(YEAR(GETDATE()) AS CHAR(4)), 2)
UPDATE dbo.YourTable
SET OtherID = @YearPrefix + '-' + RIGHT('00000' + CAST(i.EmployeeID AS VARCHAR(5)), 5)
FROM INSERTED i
WHERE dbo.YourTable.EmployeeID = i.EmployeeID
END
И, конечно, сначала вам нужно добавить в таблицу и этот новый столбец PKID
, чтобы триггер мог хранить в нем значения: -)
ALTER TABLE dbo.YourTable
ADD PKID VARCHAR(10) NOT NULL DEFAULT ('X') -- needs to be NOT NULL for Primary Key