-1

我有一个数组,我在 Javascript 中将其字符串化,如下所示

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

我正在执行 SP 如下

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

我正在尝试将每个计划 ID 保存为 table 中的每一行plan,为此我编写了下面的 SP 我正在循环数组并尝试在循环内打印PlanID(稍后我将编写 INSERT 查询代替 PRINT)。

    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 个计划 ID,也只有一条记录被插入。光标不会多次循环。

4

1 回答 1

1

解析 JSON 时存在问题。如果我们如下调用 proc,它可以正常工作。

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

请在此处找到 db<>fiddle 。

于 2020-07-14T12:34:35.180 回答