[英]IF ELSE statements to update table in sql procedure does not work
我有一个表叫员工 ,需要通过1如果1便被输入到更新员工的SalaryId和-1的情况下,减少它-1便被输入。 我认为我的方法有完全错误的逻辑,但是尽管我已经搜索了一段时间,但我找不到想要做的事情。 有人可以协助我了解我在做什么错吗?
ALTER PROCEDURE "dba"."updatePosition"(IN rating int, @PersonalID int )
AS BEGIN
IF rating = 1
UPDATE dba.Employees
IF (dba.Employees.SalaryId > 1 && dba.Employees.SalaryId < 7)
SET dba.Employees.SalaryId = dba.Employees.SalaryId + 1
WHERE dba.Employees.PersonalID = @PersonalID
ELSEIF rating = -1
UPDATE dba.Employees
SET dba.Employees.SalaryId = dba.Employees.SalaryId - 1
IF dba.Employees.SalaryId < 1
dba.Employees.SalaryId = 1
IF dba.Employees.SalaryId > 7
dba.Employees.SalaryId = 7
WHERE dba.Employees.PersonalID = @PersonalID
END
这对我来说没有意义:
UPDATE dba.Employees
IF (dba.Employees.SalaryId > 1 && dba.Employees.SalaryId < 7)
SET dba.Employees.SalaryId = dba.Employees.SalaryId + 1
WHERE dba.Employees.PersonalID = @PersonalID
也许您想要:
UPDATE dba.Employees
SET dba.Employees.SalaryId = dba.Employees.SalaryId + 1
WHERE dba.Employees.PersonalID = @PersonalID AND
dba.Employees.SalaryId > 1 AND
dba.Employees.SalaryId < 7
您正在疯狂地混合过程代码( IF
)和SQL代码( UPDATE
, WHERE
)...
我可以想象你正在追求这样的事情:
ALTER PROCEDURE "dba"."updatePosition"(IN @Rating int,
IN @PersonalID int)
AS
BEGIN
IF abs(@Rating) = 1 THEN
UPDATE dba.Employees
SET SalaryId + @Rating
WHERE PersonalID = @PersonalID
AND SalaryId + @Rating >= 1
AND SalaryId + @Rating <= 7;
END IF;
END;
它增加或减少-取决于@Rating
的符号-由SalaryId
标识的员工的@PersonalID
1
,如果该更改不会导致SalaryId
低于1
或提高至7
以上-对此的检查属于WHERE
子句,而不是IF
散布在UPDATE
语句中的任何位置。 为了检查仅-1
或1
步长是可能的,将UPDATE
包裹在IF
,当@Rating
的绝对值等于1
时,才将其输入。 如果要一次允许超过1
步骤,也可以删除IF
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.