从列中存储的JSON返回表对象

时间:2019-06-26 11:57:44

标签: sql json sql-server

很抱歉,我知道这个问题已经被询问了十亿次,但是我试图在没有任何运气的情况下将CROSS APPLY语句组合在一起,并且需要一些帮助。我在SQL的单个列中有此数据,我可以通过从表中的id = blah的select列中获得该数据:

  

[     {       “用户”:“鲍勃”,       “ Domain”:“ DOMAIN”,       “ Sid”:“ S-1-5-21-3434343-3434343434-34343343434-242210”     },     {       “用户”:“ adm-Bob”,       “ Domain”:“ DOMAIN”,       “ Sid”:“ S-1-5-21-34343434-3434343434-3434334-242240”     }   ]

如何将其变成具有三列和两个角色的表?当JSON中只有一条记录时,我可以执行此操作,但是当JSON中只有一个帐户时,我无法弄清楚。

1 个答案:

答案 0 :(得分:2)

在不知道您尝试了什么的情况下,我无法告诉您您哪里出了错,但是OPENJSONWITH在这里可以正常工作:

DECLARE @JSON nvarchar(MAX) = '[ { "User": "Bob", "Domain": "DOMAIN", "Sid": "S-1-5-21-3434343-3434343434-34343343434-242210" }, { "User": "adm-Bob", "Domain": "DOMAIN", "Sid": "S-1-5-21-34343434-3434343434-3434334-242240" } ]';

SELECT OJ.[User],
       OJ.Domain,
       OJ.[Sid]
FROM (VALUES(@JSON))V(JSON)
     CROSS APPLY OPENJSON(V.JSON) 
     WITH ([User] nvarchar(100) '$.User',
           Domain nvarchar(100) '$.Domain',
           [Sid] nvarchar(100) '$.Sid') OJ;

DB<>Fiddle