Вы дико смешиваете процедурный код (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
шага одновременно.