Добавить префикс года в автоматически сгенерированный идентификатор, который является первичным ключом - PullRequest
0 голосов
/ 23 января 2012

Я хочу, чтобы мой идентификатор генерировался автоматически, и мне нужен такой формат:

12-0001, 12-0002

12 представляет 2012 год, который является текущим годом системной даты.

И мой последнийзапись для идентификатора 12-0999, и когда наступит 2013 год, я хочу, чтобы мой идентификатор изменил префикс года и сбросил 4 цифры следующим образом:

13-0001, 13-0002.

Я использую asp.net mvc 3 и sql server express2008.

Может кто-нибудь сказать мне, как я могу это сделать.

1 Ответ

2 голосов
/ 23 января 2012

Я вижу два варианта:

(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
...