首页 > 其他分享 >在存储过程输入输出参数中使用json

在存储过程输入输出参数中使用json

时间:2024-07-16 22:41:24浏览次数:14  
标签:存储 -- 输入输出 json Param 查询 JSON 格式

Sql Server 从 2016 开始支持 json 操作,JSON支持适用于 SqlServer 2016 及以上版本 和 Azure SQL Database。sqlserver文档参考这里

有了这个json支持,默认过程只传入一个json字符串参数就可以了,方便很多。我们可以在内部做很多事情。甚至可以校验参数,鉴权或将结果集封装为标准的前后端json({code,msg,data})格式。这样等于是前端直接进校了透传,业务变化,中间层也不用改动。

JSON 相关的方法:
判断一段字符串是否是标准的 json(ISJSON
直接查询数据成 json 格式(FOR JSON PATH) ,类似于之前的查询一个 xml (FOR XML PATH),
查询一个 json 对象的值(JSON_VALUE)
查询一个 json 数组值JSON_QUERY
更新一段JSON的内容,修改 JSON 对象里的属性值,删除 JSON 对象里的某一个属性,增加属性,JSON_MODIFY
解析一段 json 内容 (OPENJSON)

 

定义一个简单的过程:

ALTER PROCEDURE [dbo].[SPABC] (  @Param VARCHAR(4000))
AS
BEGIN

    SELECT json_value(@Param,'$.NAME')

END

参数Param是json格式字符串,作为入参,在过程内被解析使用。

 

navicat客户端执行过程

 或

 区别在于数据格式不一样。

 

修改过程,查询结果集并转为json输出

ALTER PROCEDURE [dbo].[SPABC] (  @Param VARCHAR(4000))
AS
BEGIN
    -- SELECT json_value(@Param,'$.NAME')

      DECLARE @Name NVARCHAR(MAX) --定义一个内部变量接收json内部字段数据
      set @Name=json_value(@Parms,'$.NAME') --设置值

    -- 。。。内部使用变量。。。
  -- select @Name as name SELECT * from Sys_Users for json auto --此处不能使用WITHOUT_ARRAY_WRAPPER,否则代码里转换出错,格式不对 END


C#代码:

//注意,此处res有可能为多行json字符串格式,需要连接并转json对象
var res = execSPDAO.ExecUserSpDataTable(spName, param);
StringBuilder stringBuilder = new StringBuilder();
foreach(DataRow dr in res.Rows)
{
stringBuilder.Append(dr[0]);
}
var obj = JsonConvert.DeserializeObject(stringBuilder.ToString());
return new { code = 0, msg = "查询成功", data = obj };

 

 

标签:存储,--,输入输出,json,Param,查询,JSON,格式
From: https://www.cnblogs.com/thingk/p/17513983.html

相关文章

  • 实时时钟、弱函数、json
    一、实时时钟时间戳(实时的时间【单位:s】):​ 使用"time.h"文件:​ mktime()——得到一个时间戳​ localtime() ——得到一个当前时间的结构体(包含:年-月-日时:分:秒)eg:time_ttimestamp=mktime(&utc_time);//得到一个时间戳(单位为秒)structtm*beijing_time=lo......
  • Java实现将json数据转换为sql insert语句
    Java实现将json数据转换为sqlinsert语句importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml.jackson.databind.JsonNode;importcom.fasterxml.jackson.databind.ObjectMapper;importjava.util.Iterator;importjava.util.Map;publicclassJson......
  • 【YashanDB知识库】存储过程报错snapshot too old
    问题描述20231127上午客户反馈绩效系统20231125、20231126出现2次YAS-02020snapshottooold的问题,测试也有类似问题。该过程是客户新增的存储过程,目的是通过PRO_RUN_JOB作为主控,调度其他存储过程,后续不用其他调度引擎。原因分析错误信息收集分析分析存储过程报错日志,核查UN......
  • 存储系列DAS,SAN,NAS常见网络架构
    随着主机、磁盘、网络等技术的发展,对于承载大量数据存储的服务器来说,服务器内置存储空间,或者说内置磁盘往往不足以满足存储需要。因此,在内置存储之外,服务器需要采用外置存储的方式扩展存储空间,今天在这里我们分析一下当前主流的存储架构。一、DASDirectAttachedStorage,直接连......
  • C# 任意类型数据转JSON格式
    1publicclassObjectToJson2{3///<summary>4///List转成json5///</summary>6///<typeparamname="T"></typeparam>7///<paramname="jso......
  • 写了一个json小工具,希望大家体验(Mac平台)
    用rust写了一个json小工具“JSONPICKER”,欢迎大家试用:https://github.com/davelet/json-picker/releases/tag/V0.2动机是平常开发的时候,经常遇到大段json,里面的很多字段是不需要的。我所在的项目组在接口对接上出现了reponse达到数兆字节的情况市面上已经有不少json工具,......
  • 类与json的互相转化(c#)
    1//JavaScriptSerializer需添加dll引用,System.Web.Extensions2//Class转json字符串3JavaScriptSerializerserializer=newJavaScriptSerializer();4varjson=serializer.Serialize(obj);56//将json字符串在转为原先的类,JsonConvert需添加第三方dll,Newtonsoft.......
  • C#拼接Json串的几种方法
    1. 利用  JsonConvert.SerializeObject方法(Nuget获取Newtonsoft.JsonPackage),需要Newtonsoft.Json 支持。stringuid="22";varabcObject=new{AccessKey=11,CustomerNo=uid,mc="33",qd="44",mr="55",......
  • C#对象转换Json时的一些高级用法
    [JsonObject(MemberSerialization.OptIn)]//默认为不输出publicclassPeopleInfo{[JsonProperty]//需要输出publicstringName{get;set;}[JsonProperty]//需要输出publicintAge{get;set;}publicDateTimeBirthday{......
  • Retrofit2 使用FastJson作为Converter.m
    首先创建一个FastJsonRequestBodyConverter类packagecom.rrc.core.net.converter;importcom.alibaba.fastjson.JSON;importjava.io.IOException;importokhttp3.MediaType;importokhttp3.RequestBody;importretrofit2.Converter;/***=========================......