ЕСЛИ операторы ELSE для обновления таблицы в sql процедуре не работают - PullRequest
0 голосов
/ 15 января 2019

У меня есть таблица с именем Сотрудники , и мне нужно обновить SalaryId сотрудника на 1, если вводится 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

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вы дико смешиваете процедурный код (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. Вы также можете удалить IF, если хотите разрешить более 1 шага одновременно.

0 голосов
/ 16 января 2019

Это не имеет смысла для меня:

 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
...