Циклический массив Курсор не повторяется более одного раза - SQL СЕРВЕР - PullRequest
0 голосов
/ 14 июля 2020

У меня есть массив, который я преобразовал в Javascript, как показано ниже

 [{PlanID:1},{PlanID:2},{PlanID:3}]

Я выполняю SP, как показано ниже

exec save_plan [{PlanID:1},{PlanID:2},{PlanID:3}]

Я пытаюсь сохранить каждый идентификатор плана как Каждая строка в таблице plan, для которой я написал ниже SP, я зацикливаю массив и пытаюсь напечатать PlanID (позже я напишу запрос INSERT вместо PRINT) внутри l oop.

    USE [XYZ]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER Procedure save_plan
    @packages nvarchar(max)

    AS
    DECLARE
     @PlanID_FETCHED INT
     BEGIN

    DECLARE C CURSOR LOCAL FOR 
        SELECT PlanID
        FROM  OPENJSON ( @packages )  
        WITH (   
                PlanID  INT '$.PlanID'
         ) 
        OPEN C

        FETCH NEXT FROM C INTO  @PlanID_FETCHED
        WHILE @@FETCH_STATUS = 0      
        BEGIN

            PRINT @PlanID_FETCHED
        
            FETCH NEXT FROM C INTO  @PlanID_FETCHED
        END

        CLOSE C
        DEALLOCATE C

    end;

Несмотря на то, что в массиве 3 идентификатора плана, вставляется только одна запись. Курсор не зацикливается более одного раза.

1 Ответ

1 голос
/ 14 июля 2020

Возникла проблема при разборе JSON. Если мы назовем pro c, как показано ниже, он будет работать нормально.

exec save_plan '[{"PlanID":1},{"PlanID":2},{"PlanID":3}]'

Найдите здесь db <> fiddle .

...