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的角色。
答案 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;