1

如何自动递增作为 SQL Server 数据库中字符串值一部分的数字?

例如,这是我的表:

EMP_ID  EMPNAME  EMPSECTION
EMP_1   ROSE     S-11
EMP_2   JANE     R-11

当我添加一条新记录时,我想做的是自动增加后面的数字EMP_。例如, EMP_3,EMP_4等。

4

4 回答 4

0

一种选择是拥有一个具有自动增量 id 字段的表。然后,您可以在此表上编写一个触发器,该触发器在插入时触发自动增量表上的插入并获取当前值。然后将该值连接到 EMP_ 的末尾

于 2012-08-21T18:28:04.870 回答
0

您可以执行以下操作:

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 ) ,

)

但我终其一生都想不通为什么要这么做。

于 2012-08-21T20:49:10.887 回答
0

您可以在表中添加标识列,并在用户界面中显示附加到其值的“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
于 2012-08-21T18:35:20.603 回答
0

通过 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. 在某些情况下,可能会生成来自多个客户端的相同键值插入时会出错。

于 2012-08-21T18:37:31.523 回答