繁体   English   中英

使用SQL Server自定义自动生成的序列

[英]Custom Auto-Generated Sequences with SQL Server

我有一个带有员工ID列EmpID (nvarchar(5))Employee表。

这就是我将数据插入Employee表的方式

 Employee obj = new Employee();
 obj.EmpID = ?
 DBContext.Employees.InsertOnSubmit(obj);
 DBContext.SubmitChanges();

我想使EmpID的值

00001  
00002  
00003  
00004  
....
....    

我如何创建这样的自定义自动生成序列?

我建议让SQL Server使用INT IDENTITY列来处理自动增量部分。 不要在您的C#代码中执行此操作-这是数据库任务。

对于希望以特定的格式化格式包含的第二列,请使用基于该标识列的计算列。

尝试这样的事情:

CREATE TABLE dbo.Employee
(ID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED,
 EmpID AS RIGHT('0000' + CAST(ID AS VARCHAR(5)), 5) PERSISTED, 

 .... your other columns here.......
)

这样,当您在表中插入行时,您将获得:

ID    EmpID
---------------
 1    00001
 2    00002
........
17    00017
18    00018
......
78    00078

ID列是您实际的主键和群集密钥,它很小,速度快,永不更改-非常适合群集密钥。 而且,列EmpID始终是根据ID自动生成的,并根据需要以格式化的方式显示该值。

更新: @ ta.speot。被正确评论:如果您不需要数据库中的EmpID值,那么最好的方法是只在数据库中具有ID INT IDENTITY列,并处理Employee类中C#代码中的EmpID

public class Employee
{
   [Key]
   public int ID { get; set; }

   [NotMapped]
   public string EmpID 
   { 
      get { return "0000" + ID.ToString();  }  // do whatever you need to do here!
   }
}    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM