Создание собственного идентификатора
Я наткнулся на довольно интересную и сложную проблему. Предположим, у меня есть таблица, как с 3 столбцами:
id, which is VARCHAR(6)
a, which is VARCHAR(45)
b, which is VARCHAR(45)
Я пытаюсь сгенерировать пользовательский идентификатор в формате AB0001, где A - первая буква из столбца; B - первая буква из столбца b; остальные - 4 цифры (возможно, нулевое заполнение?) с автоинкрементом для каждой комбинации букв. Мой нынешний подход заключается в назначении триггера вставки с процедурой для его генерации, хотя возможно ли сделать его более простым и как?
1 ответ
Иметь стол как:
MyTable
(
pk int,
id varchar(6),
a varchar(45),
b varchar(45)
)
поставить ограничение первичного ключа на рк. Поместите индекс на pk и установите приращение индекса на 1..
Create Procedure spMyTable_Inserrt
(
a varchar(45),
b varchar(45)
)
As
insert into MyTable (a, b)
values (a, b)
return;
GO
Спусковой крючок
CREATE Trigger trgAfterInsert ON MyTable
AS
declare @pk as int
declare @id as int
select @pk= i.pk from inserted i;
select @id = case @pk % 2
where 1 then Left(a, 1) + Left(a, 1) + Right('0000' + cast(@pk as nvarchar), 4)
where 0 then Left(a, 1) + Left(b, 1) + Right('0000' + cast(@pk - 1 as nvarchar), 4)
Update MyTable
set id = @id
Where pk = @pk
GO
Хотя синтаксис может быть испорчен, как я написал для T-SQL. Кроме того, если по каким-либо причинам вы не склонны создавать первичный ключ, используйте счетчик строк в триггере для создания @id.