Ошибка Cursorfetch числа переменных в моем извлечении в утверждение - PullRequest
0 голосов
/ 18 апреля 2020

Не уверен, что не так с моим кодом здесь. Просматривал это последние 3 часа, и все кажется правильным, но я получаю эту ошибку выделения курсора при попытке выполнить процедуру. Cursorfetch: The number of variables declared in the INTO list must match that of selected columns.

В текстовом редакторе он также подчеркивает все мои Sum_Salary переменные красным в выражениях case.

Опять же, все это мне кажется правильным, и я не могу выяснить, в чем проблема в моем коде.

create procedure SP_Report_NEW_Budget
as 
begin
if exists (select * from VDept_Budget)
    create table NEW_Dept_Budget 
    (
        Dept_No         int,
        Dept_Name       varchar(30),
        COUNT_Emp       int,
        New_SUM_Salary  int,
        New_AVE_Salary  int
    )

    declare @depNumber  int,
            @depName    varchar(30),
            @empCount   int,
            @sumSalary  int,
            @aveSalary  int;
    declare tableCursor cursor for
    select Dept_Name, Dept_Number, No_Emp, Sum_Salary, Ave_Salary, 
        case
            when Dept_Number = 1 then (Sum_Salary + (Sum_Salary * 0.1))
            when Dept_Number = 4 then (Sum_Salary + (Sum_Salary * 0.2))
            when Dept_Number = 5 then (Sum_Salary + (Sum_Salary * 0.3))
            when Dept_Number = 7 then (Sum_Salary + (Sum_Salary * 0.4))
        end as New_SumSalary,
        case
            when Dept_Number = 1 then (Sum_Salary + (Sum_Salary * 0.1)) / No_Emp
            when Dept_Number = 4 then (Sum_Salary + (Sum_Salary * 0.2)) / No_Emp
            when Dept_Number = 5 then (Sum_Salary + (Sum_Salary * 0.3)) / No_Emp
            when Dept_Number = 7 then (Sum_Salary + (Sum_Salary * 0.4)) / No_Emp
        end as New_AveSalary

        from VDept_Budget

    open tableCursor

    begin
        fetch next from tableCursor into @depNumber, @depName, @empCount, @sumSalary, @aveSalary

    begin 
        insert into NEW_Dept_Budget values(@depNumber, @depName, @empCount, @sumSalary, @aveSalary)
        fetch next from tableCursor into @depNumber, @depName, @empCount, @sumSalary, @aveSalary

    end
    end
    close tableCursor

    select*from NEW_Dept_Budget

end

1 Ответ

0 голосов
/ 18 апреля 2020

Поскольку я не очень хорошо знаю ваши данные, я предполагаю, что проблема, возможно, является необработанным случаем в ваших заявлениях. Похоже, ваши отделы имеют номера c и пропускают 2, 3 и 6. Если у вас есть что-либо с каким-либо из этих отделов, ваше заявление по делу не похоже на то, что оно сможет обработать его, что вызовет проблему в вашей вставке Statement.

Кроме того, для простоты вы можете немного облегчить чтение вашего кода, если вы обновите выражения case (просто предложение):

when Dept_Number = 1 then (Sum_Salary * 1.1) / No_Emp when Dept_Number = 4 then (Sum_Salary * 1.2) / No_Emp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...