Переписать SQL без курсора для хранилища данных - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть код SQL (основное ядро) ниже, который отлично работает на SQL Server.Как переписать его для T-SQL Azure SQL DW, который не любит курсор?Я не нашел подходящего примера и не могу сделать это сам.

CREATE PROCEDURE calc_balance

CREATE TABLE output_table (Amount FLOAT, ValueStart FLOAT, ValueStop FLOAT);

DECLARE cursor_1 CURSOR FOR 
    SELECT Criteria, Amount, ValueStart, ValueStop 
    FROM Input_table

OPEN cursor_1

WHILE @fetchstatus = 0 
BEGIN
    FETCH NEXT FROM cursor_1 INTO @Criteria, @Amount, @ValueStart, @ValueStop;

    @ValueStart1 = @balance;
    @ValueStop1 = @ValueStart1 + @Amount;

    IF (@Criteria = 1) AND (@balance> -100) 
    BEGIN
        @Amount = 0;
        @ValueStop1 = @ValueStart;
    END;

    @balance = @balance + @Amount + @ValueStart;

    INSERT INTO output_table 
    VALUES (@Amount, @ValueStart1, @ValueStop1);
END;

1 Ответ

0 голосов
/ 26 сентября 2019

Вы можете попробовать это.

with cte as (
    select 0 as ctr, 0 as balance, Criteria, Amount, ValueStart, ValueStop, (select count(1) from Input_table) as ct from Input_table
    union all
    select ctr +1, balance + case when Criteria = 1 and balance >-100 then 0 else Amount end + ValueStart
        , Criteria, Amount, balance
        , case when Criteria = 1 and balance >-100 then balance + Amount else ValueStart end 
        , ct
    from cte
    where ctr < ct
)
Insert into output_table VALUES 
(select  Amount,ValueStart, ValueStop from cte where ctr>0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...