我偶然发现了一个相当有趣和困难的问题。假设我有一个像 3 列的表:
id, which is VARCHAR(6)
a, which is VARCHAR(45)
b, which is VARCHAR(45)
我正在尝试生成格式 AB0001 的自定义 ID,其中 A - 列中的第一个字母;B - b 列的第一个字母;其余的 - 4 位数字(可能是零填充?),每个字母组合都会自动递增。我目前的方法是在插入触发器上分配一个程序来生成一个,尽管有可能让它更简单吗?
我偶然发现了一个相当有趣和困难的问题。假设我有一个像 3 列的表:
id, which is VARCHAR(6)
a, which is VARCHAR(45)
b, which is VARCHAR(45)
我正在尝试生成格式 AB0001 的自定义 ID,其中 A - 列中的第一个字母;B - b 列的第一个字母;其余的 - 4 位数字(可能是零填充?),每个字母组合都会自动递增。我目前的方法是在插入触发器上分配一个程序来生成一个,尽管有可能让它更简单吗?
有这样的表:
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。