sql server

hmmo2u0o  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(412)

我有一个数组,我用javascript将其字符串化如下

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

我正在执行以下sp

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

我正在尝试将每个计划id保存为表中的每一行 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,也只插入一条记录。游标循环次数不超过一次。

ozxc1zmp

ozxc1zmp1#

解析json时出现问题。如果我们按下面的方式调用proc,它可以正常工作。

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

请在这里找到小提琴。

相关问题