如何防止sql存储过程中的重复更新

时间:2017-01-30 11:10:59

标签: sql-server stored-procedures

我在Sql和我项目的插入Form中有这个表格,我阻止用户为同一个HNumber输入相同的HDate

RecID       HDate        HNumber     HComb
----------------------------------------------
1           2017-1-30       1          12
3           2017-1-29       1          15
5           2017-1-30       2          12
6           2017-1-30       3          12
9           2017-1-30       4          12

但在编辑表格中,我不知道如何防止这种情况,

我在存储过程中尝试此代码,但它适用于某些HNumber,但它阻止其他一些HNumber在其中编辑自己的日期

Create Procedure UpdCombHarByRecID

@RecID int,
@HarvestDate Date,
@HiveNumber int,
@HoneyComb Float, 

as

if NOT Exists (Select * From tHoneyHarvest Where RecID=@RecID)
return 0   
//there is no record to be updated

if Exists (Select * From tHoneyHarvest Where HarvestDate=@HarvestDate AND
 HiveNumber=HiveNumber And
 RecID!=@RecID) 
 // I hoped this should do the job 
 //(RecID is PrimaryKey and it is identity)
return 2

Update tHoneyHarvest 

Set HarvestDate=@HarvestDate,
HoneyType=@HoneyType,
HoneyComb=@HoneyComb,
HoneyDetails=@HoneyDetails

Where RecID=@RecID
return 1

现在问题出在哪里了?

2 个答案:

答案 0 :(得分:2)

最好的方法是使用非聚簇索引.non聚簇索引可防止在插入或更新发生时出现重复记录。

CREATE UNIQUE INDEX MyIndex ON ExcelTable(HDate, HNumber)

请参阅

答案 1 :(得分:1)

感谢评论方面的帮助。问题是由于程序中的拼写错误。

if Exists (Select * From tHoneyHarvest Where HarvestDate=@HarvestDate AND
  HiveNumber=@HiveNumber And
  RecID!=@RecID) 

我忘了在HiveNumber之前添加@