繁体   English   中英

如果在SQL过程中更新表的ELSE语句不起作用

[英]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代码( UPDATEWHERE )...

我可以想象你正在追求这样的事情:

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语句中的任何位置。 为了检查仅-11步长是可能的,将UPDATE包裹在IF ,当@Rating的绝对值等于1时,才将其输入。 如果要一次允许超过1步骤,也可以删除IF

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM