码迷,mamicode.com
首页 > 数据库 > 详细

sqlserver2016版添加的json操作

时间:2021-01-20 11:51:55      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:rap   student   alt   drop   primary   没有   pen   app   tran   

sqlserver自带的json的操作主要能实现:json验证、字段提取、表格转json、json转表格式

下方所用json统一为当前json

declare @json nvarchar(max) = {
  "id": 1,
  "name": "ki",
  "age": 22,
  "son": {
    "name": "son",
    "age": 1
  },
  "list": [
    {
      "city": "上海",
      "area": "松江"
    },
    {
      "city": "上海",
      "area": "松江"
    }
  ]
};

 

一、isjson实现json验证

--结果:1-json格式正确;0-json格式错误
declare @json1 nvarchar(max) = {"id":1,"name":"ki","age":22,"son":{"name":"son","age":1},"list":[{"city":"上海","area":"松江"},{"city":"上海","area":"松江"}]}
print isjson(@json1)

结果:1

二、JSON_VALUE取出json值

declare @json2 nvarchar(max) = {"id":1,"name":"ki","age":22,"son":{"name":"son","age":1},"list":[{"city":"上海","area":"松江"},{"city":"上海","area":"松江"}]}
select JSON_VALUE(@json2,$.name)

结果:ki

三、JSON_QUERY取出json中的对象和数组

declare @json3 nvarchar(max) = {"id":1,"name":"ki","age":22,"son":{"name":"son","age":1},"list":[{"city":"上海","area":"松江"},{"city":"上海","area":"松江"}]}
select JSON_QUERY(@json3,$.son)
select JSON_QUERY(@json3,$.list)

结果:

结果1:{"name":"son","age":1}
结果2:[{"city":"上海","area":"松江"},{"city":"上海","area":"松江"}]

 

四、json字符串转化成表格式

--如果没有数组,可以将OUTER APPLY OPENJSON() WITH()省略
declare @json4 nvarchar(max) = {"id":1,"name":"ki","age":22,"son":{"name":"son","age":1},"list":[{"city":"上海","area":"松江"},{"city":"上海","area":"松江"}]}

select * from openjson(@json4)
with(
    id nvarchar(500) strict $.id,--strict表示json中必须包含该字段
    name nvarchar(500) strict $.name,
    age nvarchar(500) strict $.age,
    son_name nvarchar(500) strict $.son.name,
    son_age nvarchar(500) strict $.son.age,
    list nvarchar(max) $.list AS JSON--必须是nvarchar(max) 类型
)
OUTER APPLY OPENJSON(list)
  WITH(
            city varchar(80) $.city,
            area varchar(80) $.area
            );

结果:

 技术图片

 

 

五、将表格式转化成json格式

--for json auto 安装原列名自动转化
--for json path 指定输出json的key名称,并可以控制输出字段
-- for json auto,WITHOUT_ARRAY_WRAPPER    跟在for json auto/path后可以删除中括号
select * from student for json auto
select * from student for json auto,WITHOUT_ARRAY_WRAPPER
select 
         id as uniqueId,
         name,
         name as info.name
         from student for json path

结果:

结果:1[{"id":1,"name":"ki","age":34,"create_time":"2020-09-01T11:12:43.230"},{"id":2,"name":"李四","age":33,"create_time":"2020-09-01T11:12:43.230"},{"id":3,"name":"ki","age":34,"create_time":"2020-09-01T11:12:50.987"},{"id":4,"name":"李四a","age":33,"create_time":"2020-09-01T11:12:50.987"}]
结果2:{"id":1,"name":"ki","age":34,"create_time":"2020-09-01T11:12:43.230"},{"id":2,"name":"李四","age":33,"create_time":"2020-09-01T11:12:43.230"},{"id":3,"name":"ki","age":34,"create_time":"2020-09-01T11:12:50.987"},{"id":4,"name":"李四a","age":33,"create_time":"2020-09-01T11:12:50.987"}
结果3:[{"uniqueId":1,"name":"ki","info":{"name":"ki"}},{"uniqueId":2,"name":"李四","info":{"name":"李四"}},{"uniqueId":3,"name":"ki","info":{"name":"ki"}},{"uniqueId":4,"name":"李四a","info":{"name":"李四a"}}]

 student表数据:

/*
 Navicat Premium Data Transfer

 Source Server         : localSqlServer
 Source Server Type    : SQL Server
 Source Server Version : 14001000
 Source Host           : 127.0.0.1:1433
 Source Catalog        : custom
 Source Schema         : dbo

 Target Server Type    : SQL Server
 Target Server Version : 14001000
 File Encoding         : 65001

 Date: 19/01/2021 17:03:20
*/


-- ----------------------------
-- Table structure for student
-- ----------------------------
IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N[dbo].[student]) AND type IN (U))
    DROP TABLE [dbo].[student]
GO

CREATE TABLE [dbo].[student] (
  [id] int  IDENTITY(1,1) NOT NULL,
  [name] varchar(5) COLLATE Chinese_PRC_CI_AS  NULL,
  [age] int  NULL,
  [create_time] datetime  NULL
)
GO

ALTER TABLE [dbo].[student] SET (LOCK_ESCALATION = TABLE)
GO


-- ----------------------------
-- Records of student
-- ----------------------------
SET IDENTITY_INSERT [dbo].[student] ON
GO

INSERT INTO [dbo].[student] ([id], [name], [age], [create_time]) VALUES (N1, Nki, N34, N2020-09-01 11:12:43.230)
GO

INSERT INTO [dbo].[student] ([id], [name], [age], [create_time]) VALUES (N2, N李四, N33, N2020-09-01 11:12:43.230)
GO

INSERT INTO [dbo].[student] ([id], [name], [age], [create_time]) VALUES (N3, Nki, N34, N2020-09-01 11:12:50.987)
GO

INSERT INTO [dbo].[student] ([id], [name], [age], [create_time]) VALUES (N4, N李四a, N33, N2020-09-01 11:12:50.987)
GO

SET IDENTITY_INSERT [dbo].[student] OFF
GO


-- ----------------------------
-- Auto increment value for student
-- ----------------------------
DBCC CHECKIDENT ([dbo].[student], RESEED, 6)
GO


-- ----------------------------
-- Primary Key structure for table student
-- ----------------------------
ALTER TABLE [dbo].[student] ADD CONSTRAINT [PK__student__3213E83F18AD2C2B] PRIMARY KEY CLUSTERED ([id])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)  
ON [PRIMARY]
GO

 

sqlserver2016版添加的json操作

标签:rap   student   alt   drop   primary   没有   pen   app   tran   

原文地址:https://www.cnblogs.com/whalesea/p/14298855.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!