当前位置: 首页 > wzjs >正文

莱阳 网站建设郴州网站建设案例

莱阳 网站建设,郴州网站建设案例,建筑工地网站有哪些,哪个网站可以免费下载电视剧看本文主要介绍,在sqlserver存储过程中,使用JSON字符串作为入参,并解析使用。 JSON 相关的方法: ISJSON: 作用:判断一段字符串是否是标准的 jsonFOR JSON PATH:作用:直接查询数据成 j…

本文主要介绍,在sqlserver存储过程中,使用JSON字符串作为入参,并解析使用。

JSON 相关的方法:

  • ISJSON: 作用:判断一段字符串是否是标准的 json
  • FOR JSON PATH:作用:直接查询数据成 json 格式 ,类似于之前的查询一个 xml (FOR XML PATH)
  • JSON_VALUE:作用:获取json中的节点值,获取json中的节点值,包含标量值、嵌套对象属性
  • JSON_QUERY:作用:提取嵌套对象和嵌套数组
  • JSON_MODIFY:作用:更新一段JSON的内容,修改 JSON 对象里的属性值,删除 JSON 对象里的某一个属性,增加属性
  • OPENJSON:解析一段 json 内容

使用示例:

以下json字符串示例中,包含嵌套对象、数组,后面以此json为示例演示。

DECLARE @json NVARCHAR(MAX) = N'{"student_id": 10,"student_name": "张三","student_age": 18,"student_class": {"class_id": 2,"class_code": "snj2","class_name": "三年级2班"},"student_subjects": [{"subject_id": 1,"subject_name": "语文"},{"subject_id": 2,"subject_name": "数学"}]
}';

在JSON中,分为标量值可非标量值:

  • 标量值:
    • 定义:单一的、不可再分解的基础数据类型
    • 例如:上面JSON串,顶层字段student_id、student_name、student_age
  • 非标量值:
    • 定义:可包含多个元素或键值对的复合数据结构
    • 例如:上面JSON串,student_class节点(嵌套对象),student_subjects(嵌套数组)
结构类型路径表达式数据类型
标量值$.student_id数值
标量值$.student_name字符串
标量值$.student_age数值
嵌套对象$.student_classJSON 对象
嵌套数组$.student_subjectsJSON 数组

标量值

解析顶层字段标量值student_id、student_name、student_age

	--方法1,直接JSON_VALUE获取--方法1,直接使用JSON_VALUE获取顶层标量字段SELECT JSON_VALUE(@json, '$.student_id') AS student_id,JSON_VALUE(@json, '$.student_name') AS student_name,JSON_VALUE(@json, '$.student_age') AS student_age--方法2,使用OPENJSON解析SELECT id as student_id,name as student_name,age as student_ageFROM OPENJSON(@json) WITH (id INT '$.student_id',name NVARCHAR(50) '$.student_name',age INT '$.student_age');

在这里插入图片描述

嵌套对象

获取非标量值嵌套对象student_class节点中的class_id、class_code、class_name

--方法1,直接使用JSON_VALUE,通过$.student_class.xx获取SELECT JSON_VALUE(@json, '$.student_class.class_id') AS class_id,JSON_VALUE(@json, '$.student_class.class_code') AS class_code,JSON_VALUE(@json, '$.student_class.class_name') AS class_name--方法2,使用OPENJSON解析,用$.student_class.xx获取SELECT class_id,class_code,class_nameFROM OPENJSON(@json) WITH (class_id NVARCHAR(50) '$.student_class.class_id',class_code NVARCHAR(50) '$.student_class.class_code',class_name NVARCHAR(50) '$.student_class.class_name') AS class--方法3,先JSON_QUERY获取student_class节点,然后OPENJSON解析SELECT class_id,class_code,class_nameFROM OPENJSON(JSON_QUERY(@json, '$.student_class')) WITH (class_id NVARCHAR(50) '$.class_id',class_code NVARCHAR(50) '$.class_code',class_name NVARCHAR(50) '$.class_name') AS class

在这里插入图片描述

嵌套数组

获取非标量嵌套数组student_subjects中的属性值

	--直接使用JSON_VALUE? 不可以,获取不到SELECT JSON_VALUE(@json, '$.student_subjects.subject_id') AS class_id,JSON_VALUE(@json, '$.student_subjects.subject_name') AS class_code--使用OPENJSON解析+$.student_subjects.xx读取? 不可以,获取不到SELECT subject_id,subject_nameFROM OPENJSON(@json) WITH (subject_id NVARCHAR(50) '$.student_subjects.subject_id',subject_name NVARCHAR(50) '$.student_subjects.subject_name') AS subject--正确方法:先使用JSON_QUERY获取$.student_subjects节点,再OPENJSON解析SELECT subject_id,subject_nameFROM OPENJSON(JSON_QUERY(@json, '$.student_subjects')) WITH (subject_id INT '$.subject_id',subject_name NVARCHAR(50) '$.subject_name') AS subject;

在这里插入图片描述

普通数组

--基本类型数组
DECLARE @json NVARCHAR(MAX) = N'[10,20,30
]';
SELECT value AS Number
FROM OPENJSON(@json);--引用类型数组
DECLARE @json2 NVARCHAR(MAX) = N'[{"id":1,"name":"张三"},{"id":2,"name":"李四"}
]';
SELECT id,name
FROM OPENJSON(@json2)
WITH ( --虚拟表映射id INT '$.id',        -- 提取每个对象的id字段name NVARCHAR(50) '$.name'  -- 提取每个对象的name字段
);

在这里插入图片描述

简单存储过程使用示例:

下面还是通过上面的JSON字符串示例,演示一下如何存储过程使用JSON字符串接收,并在其中解析使用等。

ALTER PROCEDURE ParseStudentJson@json NVARCHAR(MAX)
AS
BEGIN--json示例
--DECLARE @json NVARCHAR(MAX) = N'{
--    "student_id": 10,
--    "student_name": "张三",
--    "student_age": 18,
--    "student_class": {
--        "class_id": 2,
--        "class_code": "snj2",
--        "class_name": "三年级2班"
--    },
--    "student_subjects": [
--        {
--            "subject_id": 1,
--            "subject_name": "语文"
--        },
--        {
--            "subject_id": 2,
--            "subject_name": "数学"
--        }
--    ]
--}';-- 验证 JSON 格式IF ISJSON(@json) = 0BEGINRAISERROR('输入参数不是有效的 JSON 格式', 16, 1);RETURN;ENDcreate table #student(student_id int,student_name varchar(50),student_age int)create table #student_class(class_id int,class_code varchar(50),class_name varchar(50),student_id int)create table #student_subject(subject_id int,subject_name varchar(50),student_id int)-- 解析学生信息 方法1INSERT INTO #student (student_id, student_name, student_age)SELECT JSON_VALUE(@json, '$.student_id') AS student_id,JSON_VALUE(@json, '$.student_name') AS student_name,JSON_VALUE(@json, '$.student_age') AS student_age/**解析顶层字段 方法2INSERT INTO #student (student_id, student_name, student_age)SELECT id as student_id,name as student_name,age as student_ageFROM OPENJSON(@json) WITH (id INT '$.student_id',name NVARCHAR(50) '$.student_name',age INT '$.student_age');**/-- 解析班级信息 方法1INSERT INTO #student_class (class_id, class_code, class_name, student_id)SELECT JSON_VALUE(@json, '$.student_class.class_id') AS class_id,JSON_VALUE(@json, '$.student_class.class_code') AS class_code,JSON_VALUE(@json, '$.student_class.class_name') AS class_name,JSON_VALUE(@json, '$.student_id') AS student_id/**解析班级信息 方法2INSERT INTO #student_class (class_id, class_code, class_name, student_id)SELECT class_id,class_code,class_name,student_idFROM OPENJSON(@json) WITH (class_id NVARCHAR(50) '$.student_class.class_id',class_code NVARCHAR(50) '$.student_class.class_code',class_name NVARCHAR(50) '$.student_class.class_name') AS classCROSS APPLY (SELECT student_id FROM #student) AS s; --CROSS APPLY​​:动态关联,右侧子查询可引用左侧表的列,类似逐行处理,有一点点类似join的感觉**//**解析班级信息 方法3INSERT INTO #student_class (class_id, class_code, class_name, student_id)SELECT class_id,class_code,class_name,student_idFROM OPENJSON(JSON_QUERY(@json, '$.student_class')) WITH (class_id NVARCHAR(50) '$.class_id',class_code NVARCHAR(50) '$.class_code',class_name NVARCHAR(50) '$.class_name') AS classCROSS APPLY (SELECT student_id FROM #student) AS s; **/-- 解析学科信息 INSERT INTO #student_subject (subject_id, subject_name, student_id)SELECT subject_id,subject_name,student_idFROM OPENJSON(JSON_QUERY(@json, '$.student_subjects')) WITH (subject_id INT '$.subject_id',subject_name NVARCHAR(50) '$.subject_name') AS subjectCROSS APPLY (SELECT student_id FROM #student) AS s;--这里为了方便,只是往临时表写了数据并查出来,实际业务可以是根据入参,去更新、删除业务表数据select * from #student;select * from #student_class;select * from #student_subject;drop table #student;drop table #student_class;drop table #student_subject;
END

总结:

  • JSON_VALUE:
    • 提取标量值,如上 JSON_VALUE(@json, ‘$.student_id’)
    • 提取嵌套对象属性,如上 JSON_VALUE(@json, ‘$.student_class.class_id’)
  • JSON_QUERY:
  • 提取嵌套对象
  • 提取嵌套数组
    在这里插入图片描述
  • OPENJSON:
  • 解析JSON都要用到

文章转载自:

http://ue4hnIqg.ztmnr.cn
http://hA7lmrcC.ztmnr.cn
http://XXytOfwY.ztmnr.cn
http://KugEY0KD.ztmnr.cn
http://fk2teqAC.ztmnr.cn
http://WnpPxp2g.ztmnr.cn
http://uOwbNoBd.ztmnr.cn
http://2lgWLQHz.ztmnr.cn
http://JvlTXirs.ztmnr.cn
http://PyeXXCTe.ztmnr.cn
http://bgpzNMeT.ztmnr.cn
http://ZKcLKp7H.ztmnr.cn
http://sa0TXHKD.ztmnr.cn
http://7Ec6zR5w.ztmnr.cn
http://MdQT8qRS.ztmnr.cn
http://X4duXocb.ztmnr.cn
http://pZWxDZSQ.ztmnr.cn
http://qQsFjtri.ztmnr.cn
http://WjTwBDD7.ztmnr.cn
http://eiIdV7r6.ztmnr.cn
http://lAD0lxJn.ztmnr.cn
http://zPZXSFkY.ztmnr.cn
http://3lmr8J7q.ztmnr.cn
http://6yZV95Df.ztmnr.cn
http://YQcK1JAp.ztmnr.cn
http://O0QbaAN8.ztmnr.cn
http://I4MN18Xx.ztmnr.cn
http://uZA2o56X.ztmnr.cn
http://weo4wqqP.ztmnr.cn
http://ZzivsEyN.ztmnr.cn
http://www.dtcms.com/wzjs/761145.html

相关文章:

  • 网站套站织梦资源下载站网站模板
  • 公司网站建立费用网站建设 大公司
  • 做外贸 网站邮箱申请给别人做网站
  • 南昌seo站内优化wordpress标签使用文章列表
  • 广州联亨科技网站建设电子商务网站开发目标
  • 网站项目计划说明书和先锋影音和做的网站
  • 宿州网站建设推广佛山建网站公司哪家好
  • win10记事本怎么做网站广州个人网站建设公司
  • 韩国私人网站服务器中国能建官网
  • 学校网站推广方案长沙市网站推广哪家专业
  • 上海公司注册一站式企业服务什么是网络营销常见的手段有哪些
  • 微信一键登录网站怎么做做外贸营销型网站
  • 可以看禁止访问网站的浏览器网站建设文化公司
  • 网站空间单位网站建设的实训心得 500字
  • 建设网站制作汉狮团队微信开发小程序开发网站建设
  • 建设一个网站需要多久河南安阳网站建设
  • 西安东郊网站建设公司揭阳做网站设计
  • 阿里建站官网wordpress会员制网站
  • 做侦探网站考试网站怎么做的
  • 南阳网站建设域名公司网站专题页面怎么做
  • 做网站logo用啥软件佛山产品推广
  • 广州番禺区天气预报江门关键词优化价格
  • 大学生兼职做网站wordpress更新服务ping
  • 高明网站设计报价政务网站开发合同
  • 网上做效果图网站做网站后面维护要收钱吗
  • 公司网站建设征求意见表wordpress 支付下载
  • 网站开发广东手机网站的制作
  • 做网站需要知道什么网站是如何建立的呢
  • 网站制作怎么创业泰安网络推广seo
  • wordpress站群是什么辽宁建设工程造价管理网站