0

我偶然发现了一个相当有趣和困难的问题。假设我有一个像 3 列的表:

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

我正在尝试生成格式 AB0001 的自定义 ID,其中 A - 列中的第一个字母;B - b 列的第一个字母;其余的 - 4 位数字(可能是零填充?),每个字母组合都会自动递增。我目前的方法是在插入触发器上分配一个程序来生成一个,尽管有可能让它更简单吗?

4

1 回答 1

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。

于 2013-06-09T10:26:03.567 回答