在 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 子句而不是 IFs 传播UPDATE 语句中的任何位置。要检查只有 -11 的步骤是可能的,UPDATE 被包裹在 IF 中,只有在 [=14= 的绝对值时才输入] 等于 1。如果您想一次允许超过 1 个步骤,您也可以删除 IF