解析Json之后需要的逻辑

时间:2018-10-22 12:26:33

标签: sql json sql-server

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)

我希望逻辑将以上QUERY输出与另一个表(表A)进行比较,如果该表中存在ID,则是否存在上述ID,那么对应ID的角色是否存在,如果不存在角色,我想插入ID的角色。

1 个答案:

答案 0 :(得分:0)

我相信您可以使用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