制作自定义ID

时间:2013-06-09 10:21:27

标签: mysql customization zerofill

我偶然发现了一个有趣且困难的问题。 假设我有一个类似于3列的表:

id, which is VARCHAR(6)
a, which is VARCHAR(45)
b, which is VARCHAR(45)

我正在尝试生成格式为AB0001的自定义ID,其中A - 列中的第一个字母; B - b栏的第一个字母;其余 - 4位数(可能是zerofill?),每个字母组合都有自动增量。我当前的方法是在插入触发器上分配一个生成一个的过程,尽管是否可以使它更简单以及如何?

1 个答案:

答案 0 :(得分:0)

如表所示:

   MyTable
   (
        pk int,
        id varchar(6),
        a varchar(45),
        b varchar(45)
   )

在pk上设置主键约束。在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。