如何自动递增作为 SQL Server 数据库中字符串值一部分的数字?
例如,这是我的表:
EMP_ID EMPNAME EMPSECTION
EMP_1 ROSE S-11
EMP_2 JANE R-11
当我添加一条新记录时,我想做的是自动增加后面的数字EMP_
。例如, EMP_3
,EMP_4
等。
一种选择是拥有一个具有自动增量 id 字段的表。然后,您可以在此表上编写一个触发器,该触发器在插入时触发自动增量表上的插入并获取当前值。然后将该值连接到 EMP_ 的末尾
您可以执行以下操作:
create table dbo.foo
(
id int not null identity(1,1) , -- actual primary key
.
.
.
formatted_id as 'emp_' + convert(varchar,id) , -- surrogate/alternate key
constraint foo_PK primary key ( id ) ,
constraint foo_AK01 unique ( formatted_id ) ,
)
但我终其一生都想不通为什么要这么做。
您可以在表中添加标识列,并在用户界面中显示附加到其值的“EMP_”。如果您想以自定义方式进行操作,则需要一个序列表
创建序列表
Sequence
-------------------
Seq_Name | Seq_Val
-------------------
EMPLOYEE | 0
然后你需要一个存储过程来执行这个
BEGIN
declare @curVal int
Select @curVal = Seq_Val+1 From Sequence Where Seq_Name='EMPLOYEE'
UPDATE Sequence SET Seq_Val = Seq_Val+1 Where Seq_Name='EMPLOYEE'
Insert into Employee Values ('EMP_'+Cast(@curVal As Varchar), 'Rose', 'S-11')
END
通过 C# 很容易做到,每次您想在插入该行之前插入一个新行时,您应该按照以下步骤生成密钥:
1-获取您的 ID 字段列表 2-为每个循环执行一次以找到最大键值,如下所示:
int maxID=1;
for each(var l in list)
{
if(int.Parse(l.ID.Replace("EMP_",""))>maxID)
{
maxID=int.Parse(l.ID.Replace("EMP_",""));
}
}
maxID=maxID+1;
string ID="EMP_"+maxID.Tostring();
ID是你的新ID!
但是如果您的应用程序被多个程序访问(例如:考虑它是一个网站),我真的不建议您这样做,原因是:1. 这很耗时 2. 在某些情况下,可能会生成来自多个客户端的相同键值插入时会出错。