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

时间:2013-09-21 04:25:46

标签: c# sql-server-2008-r2

我有一个Employee表,其中包含员工ID列EmpID (nvarchar(5))

这是我将数据插入Employee

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

我想将EmpID的值设为

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

如何创建这样的自定义自定义序列?

1 个答案:

答案 0 :(得分:3)

我建议让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.is正确地评论道:如果您在数据库中不需要EmpID值,那么最好的方法就是数据库中的ID INT IDENTITY列,并处理EmpID类中C#代码中Employee的生成:

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!
   }
}