首页 > 解决方案 > 将 Json 表中的数据插入到已经在 SQL 中创建的视图中

问题描述

我有一个问题,我必须从存储在只有一个字段的表中的 Json 中插入数据,只需直接插入到视图中,但据我所知,没有任何方法可以更新或将数据插入到视图中,请执行任何人都知道如何调整或设置视图以从表中插入数据(PS:我不能使用 insert into 或 select into)

我的第一个包含 Json 数据的表:

|  JsonOutPut                                                                   |
|-------------------------------------------------------------------------------|
|[{"FID":1,"Fname":"cake","Fcount":5,"FDate":"2020-02-13","Fregion":"UK"},...]  |

我的观点应该是这样的:

| FID | Fname | Fcount| FDate    | Fregion |
|-----|-------|-------|----------|---------|
|  1  | cake  |   5   |2020-02-13|    UK   |

我不想创建新表!

标签: sqljsonsql-serverviewinsert

解决方案


create table jtable(JsonOutPut nvarchar(max));
go
insert into jtable(JsonOutPut)
values('[{"FID":1,"Fname":"cake","Fcount":5,"FDate":"2020-02-13","Fregion":"UK"},{"FID":2,"Fname":"pie","Fcount":15,"FDate":"2020-02-15","Fregion":"UK"}]'),
('[{"FID":100,"Fname":"cake100","Fcount":1005,"FDate":"2020-02-13","Fregion":"UK100"},{"FID":1002,"Fname":"pie100","Fcount":10015,"FDate":"2020-02-15","Fregion":"UK100"}]');
go

create view jview
as
select oj.FID, oj.Fname, oj.Fcount, oj.FDate, oj.Fregion
from jtable
cross apply openjson(JsonOutPut) 
with
(
FID int '$.FID',
Fname varchar(100) '$.Fname',
Fcount int '$.Fcount',
FDate date '$.FDate',
Fregion varchar(20) '$.Fregion'
) as oj
go

select *
from jview
go

drop view if exists jview
drop table if exists jtable
go

推荐阅读