zey
zey

Reputation: 6105

Custom Auto-Generated Sequences with SQL Server

I have an Employee table with an employee ID column EmpID (nvarchar(5)).

This is how I insert data into the Employee table

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

I want to make EmpID's value to

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

How can I create such a custom auto-generated sequence likes this ?

Upvotes: 0

Views: 1961

Answers (1)

marc_s
marc_s

Reputation: 754438

I would recommend to let SQL Server handle the auto-incrementing part by using an INT IDENTITY column. Don't do this in your C# code - that's a database task.

For your second column that you want to have in a specific, formatted fashion, use a computed column based on that identity column.

Try something like this:

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

That way, when you insert rows into the table, you'll get:

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

The ID column is your actual primary and clustering key, it's small, fast, never changes - perfect for a clustering key. And your column EmpID is always automatically generated from the ID and shows the value in the formatted fashion as you wanted.

Update : as @ta.speot.is rightfully commented: if you don't need that EmpID value in the database for anything, then the best approach would be to just have the ID INT IDENTITY column in the database, and handle the generating of the EmpID in your C# code in the Employee class:

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

Upvotes: 3

Related Questions