代码之家  ›  专栏  ›  技术社区  ›  Ram

分析JSON后所需的逻辑

  •  0
  • Ram  · 技术社区  · 7 年前
    DECLARE @json NVARCHAR(MAX)
    DECLARE @userid int
    SET @userid=3
    SET @json =  
    N'[{"ID":1,"Roles":[1,2]},{"ID":2, "Roles":[1,2,3]},{"ID":3,"Roles":[1,2,3,4]}]'
    
    BEGIN
     SELECT ID, R.[Value] AS [Role]
    FROM OPENJSON(@json) WITH (
        ID INT, 
        [Roles] NVARCHAR(MAX) AS JSON
    )
    CROSS APPLY OPENJSON([Roles]) R
    end
    

    上面的查询给出下面的结果。

    ID ROLE
    1   1
    1   2
    2   1
    2   2
    2   3
    3   1
    3   2
    3   3
    3   4
    
    CREATE TABLE A(ID INT,ROLE INT)
    

    我希望逻辑将上面的查询输出与另一个表(表A)进行比较,无论上面的ID是否存在。如果ID存在于该表中,那么角色是否存在于相应的ID中,如果角色不存在,我希望为ID插入角色。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Salman Arshad    7 年前

    我相信你可以用 EXCEPT 要筛选表中尚未存在的行,请执行以下操作:

    DECLARE @a TABLE (ID INT, ROLE INT);
    INSERT INTO @a VALUES
    (1, 2),
    (2, 2),
    (3, 3);
    
    INSERT INTO @a
    SELECT ID, R.[Value] AS [Role]
    FROM OPENJSON(@json) WITH (
        ID INT, 
        [Roles] NVARCHAR(MAX) AS JSON
    )
    CROSS APPLY OPENJSON([Roles]) R
    EXCEPT
    SELECT ID, ROLE
    FROM @a;
    

    Test