Я хотел бы создать процедуру, набор комисси (COMM
) для работников из данного номера отдела (DEPTNO
), который имеет более низкую зарплату (SAL
), чем насчитайте SAL
из DEPTNO
Процедура с петлей
Я написал следующие процедуры:
CREATE PROCEDURE test1
@deptno INT
AS
BEGIN
DROP TABLE #emps
DECLARE @avg INT
SELECT @avg = AVG(SAL) FROM EMP WHERE DEPTNO = @deptno
SELECT
RowNum = ROW_NUMBER() OVER(ORDER BY EMPNO)
,*
INTO #emps
FROM EMP
DECLARE @MaxRownum INT
SET @MaxRownum = (SELECT MAX(RowNum) FROM #emps)
DECLARE @Iter INT
SET @Iter = (SELECT MIN(RowNum) FROM #emps)
WHILE @Iter <= @MaxRownum
BEGIN
SELECT *
FROM #emps
WHERE RowNum = @Iter
SET COMM = SAL * 0,05 IF DEPTNO = @deptno AND SAL < @avg
SET @Iter = @Iter + 1
END
END
, но кажется, что он не работает внутри цикла. Я никогда не использовал перед любыми циклами в SQL. Как я могу решить эту проблему?
Есть ли причина того, что вы используете цикл? Кроме того, может возникнуть синтаксическая ошибка. Между 0 и 05 есть запятая после SET COMM = SAL * . Набор выборочных данных будет полезен. – Steven