我偶然发现了一个有趣且困难的问题。 假设我有一个类似于3列的表:
id, which is VARCHAR(6)
a, which is VARCHAR(45)
b, which is VARCHAR(45)
我正在尝试生成格式为AB0001的自定义ID,其中A - 列中的第一个字母; B - b栏的第一个字母;其余 - 4位数(可能是zerofill?),每个字母组合都有自动增量。我当前的方法是在插入触发器上分配一个生成一个的过程,尽管是否可以使它更简单以及如何?
答案 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。