我写了一个存储过程来更新记录。它提到每个年度每个BPS的工资明细,同一年内同一个BPS不能存在2次,即
BPS Year
01 2014
02 2015
02 2015 (wrong)
此存储过程不起作用。
IF EXISTS (SELECT * FROM Setup.SalaryChart WHERE SalaryChartID = @SalaryChartID)
BEGIN
IF EXISTS(SELECT * FROM Setup.SalaryChart
WHERE BPS = @BPS AND Year_ID = @Year_ID
AND SalaryChartID != @SalaryChartID )
BEGIN
RAISERROR('Record already exists for selected BPS',16,1)
RETURN
END
ELSE
IF EXISTS(SELECT * FROM Setup.SalaryChart
WHERE BPS = @BPS AND Year_ID = @Year_ID
AND SalaryChartID = @SalaryChartID)
BEGIN
--UPDATE OF THE RECORD
UPDATE Setup.SalaryChart
SET BPS = @BPS,
Year_ID = @Year_ID,
FromDate = @FromDate,
InitialSalary = @InitialSalary,
Increment = @Increment,
MaxSalary = @MaxSalary,
IsActive = @IsActive,
SystemUser_ID = @SystemUser_ID
WHERE
SalaryChartID = @SalaryChartID
END
END
更新:
例如:
我有记录
BPS Year Salary Bonus
01 2015 $100 $1
现在我更新此记录以仅更改奖励数字然后它将在EXISTS检查中失败。
答案 0 :(得分:1)
正确的方式:
最简单的方法是在桌面上添加UNIQUE
约束。
ALTER TABLE Setup.SalaryChart
ADD CONSTRAINT uc_SalaryChart UNIQUE(BPS, [Year]); -- probably also SalaryChartID
自定义检查可能更慢且容易出错。
对于您的SP,您应该使用IF cond ELSE
。我没有看到IF cond ELSE cond ...