【发布时间】:2021-08-31 21:03:19
【问题描述】:
我需要将值插入表中。我必须创建存储过程。这个 SP 是 API 的一部分,当用户在 UI 上“保存”数据时,这个 API 会调用并执行这个 SP。下面如果是 JSON 格式,我从 UI 中得到。
CREATE TABLE dbo.test
(
Quarter,
Entity,
Schooldetails,
Teachername,
Teachid,
Observation
)
CREATE TABLE dbo.test1
(
username,
Age,
Id,
CtrName,
Rank,
Levelid,
business
) - two records will be inserted
"Easy" : {
"Quarter": "2nd Q"
"Entity": "ABC"
"Schooldetails": [{
"Username": "Dinesh,K",
"Age": "45",
"Id": "1"
}, {
"Username": "Dinesh,K",
"Age": "45",
"Id": "1"
}
],
"Teachername": "Suni",
"Teachid" : "123",
"Additionalinfo":[{
"CtrName": "test1",
"Rank": "1",
"Levelid": "lvl1",
"business": "forest"
},{
"CtrName": "test2",
"Rank": "2",
"Levelid": "lvl2",
"business": "air"
}
],
"Observation": "1"
}
我试过了,但没有用。它抛出一个错误......当我尝试使用邮递员时。 邮递员的错误信息:
JSON 文本格式不正确。在第 9 位发现意外字符“{”。
CREATE PROCEDURE DBO.TEST @easy VARCHAR(max)
as
Begin
Set @json = '{ "Easy": {' + @easy + '} }'
begin try
begin trans
insert into dbo.test
(
Quarter,
Entity,
Schooldetails,
Teachername,
Teachid,
Observation
)
(
select JSON_Value (a.value, '$.Quarter') Quarter,
JSON_Value (a.value, '$.Entity') Entity,
JSON_Value (a.value, '$.Schooldetails') Schooldetails,
JSON_Value (a.value, '$.Teachername') Teachername,
JSON_Value (a.value, '$.Teachid') Teachid,
JSON_Value (a.value, '$.Observation') Observation from OPENJSON(@json, '$.easy') as easy
insert into dbo.test1
(
username,
Age,
Id,
CtrName,
Rank,
Levelid,
business
)
(
select JSON_Value (a.value, '$.username') username,
JSON_Value (a.value, '$.Age') Age,
JSON_Value (a.value, '$.Id') Id,
JSON_Value (a.value, '$.CtrName) CtrName,
JSON_Value (a.value, '$.Rank') Rank,
JSON_Value (a.value, '$.Levelid') Levelid,
JSON_Value (a.value, '$.business') business
from OPENJSON(@json, '$.easy') as easy1 CROSS APPLY OPENJSON(easy1.value, '$.Schooldetails') as b
)
insert into dbo.test1
(
username,
Age,
Id,
CtrName,
Rank,
Levelid,
business
)
(
select
JSON_Value (a.value, '$.CtrName) CtrName,
JSON_Value (a.value, '$.Rank') Rank,
JSON_Value (a.value, '$.Levelid') Levelid,
JSON_Value (a.value, '$.business') business
from OPENJSON(@json, '$.easy') as easy1 CROSS APPLY OPENJSON(easy1.value, '$.Additionalinfo') as b
)
【问题讨论】:
-
你想从JSON字符串中读取数据并插入到上面提到的2个sql server表中吗?
-
是的,我想把上面的json分成两个表。
-
您的 JSON 无效。它需要一个起始大括号,第 2 行和第 3 行末尾的逗号,并且不需要额外的结束大括号。没有
Schooldetails属性,因此不清楚您在那里尝试做什么。如果你CROSS APPLY两次,你会得到重复的行
标签: sql json sql-server