防止注册SQL数据库中重复的员工ID

时间:2011-11-14 20:12:52

标签: asp.net sql-server stored-procedures

我创建了一个简单的asp.net表单,允许用户查看培训的日期列表并注册该日期,他们手动输入他们的名字和employeeid(我不想让dulpicate员工ID),每个日期对应对于训练(表中的唯一id),这将被插入具有以下结构的表中:

tbl_emptraining

trainig_id ( which is unique) 
trainingDate
employeename ( which is unique) 
employeeID (entered ) needs to be unique on each trainig_id and unique for all different training ids.. 

如何防止员工在Sql数据库中注册重复的trainig ID。我想发一个事件,消息可以成功地显示给用户,该员工已经注册了培训.. ???

5 个答案:

答案 0 :(得分:1)

两种方法可以做到这一点......

在两列的组合上添加唯一(可以是非聚集的)索引(这也使得通过trainID / empID更快地搜索)

使用唯一约束(http://www.w3schools.com/sql/sql_unique.asp)

ALTER TABLE [TableName]
ADD CONSTRAINT uc_PersonTrainID UNIQUE (training_id, employee_id)

您还提到员工姓名是唯一的......您可能想重新考虑一个......有一些非常常见的名称。

如果有帮助,请评价。

答案 1 :(得分:0)

根据您使用的SQL Server版本,您可以使用merge语句,如果未满足某些条件,则会插入记录(通常称为upsert语句)。如果你不能使用merge语句,你可以编写自己的upsert存储过程。

答案 2 :(得分:0)

用户如何选择培训ID?如果存在某种下拉列表,则只选择那些符合条件的培训条目(此类培训和数据库中的用户尚未有培训记录)。然后,他们不会选择无法保存的东西。

答案 3 :(得分:0)

如果我正确理解您的问题,您可以设置多列主键。使用training_id和employeeID。这将只允许为每个training_id输入一次employeeID“12345”。

答案 4 :(得分:0)

首先,您应该确保数据库具有正确的约束。在这种情况下,employeeID字段上的唯一索引和employeeName上的唯一约束可能是正确的。

然后,在您的业务逻辑(.net代码,但为此创建一个定义的层有用)中,您将检查数据库以查看employeeName是否已存在。如果名称已存在,则返回消息。

最后,您可以使用一些javascript以与上面相同的方式对数据库进行实时调用,但这是可选的。

另外,看看你写的内容,看来你的数据库架构可能会更好,培训和员工之间存在多对一的关系。