在 sql 过程中更新 table 的 IF ELSE 语句不起作用
IF ELSE statements to update table in sql procedure does not work
我有一个名为 Employees 的 table,如果输入 1,我需要将员工的 SalaryId 更新为 1如果输入 -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
的符号——由@PersonalID
识别为1
的员工的SalaryId
,如果该变化没有't cause the SalaryId
drop below 1
or raised above 7
-- 支票属于 WHERE
子句而不是 IF
s 传播UPDATE
语句中的任何位置。要检查只有 -1
或 1
的步骤是可能的,UPDATE
被包裹在 IF
中,只有在 [=14= 的绝对值时才输入] 等于 1
。如果您想一次允许超过 1
个步骤,您也可以删除 IF
。
我有一个名为 Employees 的 table,如果输入 1,我需要将员工的 SalaryId 更新为 1如果输入 -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
的符号——由@PersonalID
识别为1
的员工的SalaryId
,如果该变化没有't cause the SalaryId
drop below 1
or raised above 7
-- 支票属于 WHERE
子句而不是 IF
s 传播UPDATE
语句中的任何位置。要检查只有 -1
或 1
的步骤是可能的,UPDATE
被包裹在 IF
中,只有在 [=14= 的绝对值时才输入] 等于 1
。如果您想一次允许超过 1
个步骤,您也可以删除 IF
。