Создание собственного идентификатора

Я наткнулся на довольно интересную и сложную проблему. Предположим, у меня есть таблица, как с 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.

Другие вопросы по тегам