使用sql server json函数OPENJSON将数据转成表,通过游标遍历结果集,将JSON内容转换成行并插入临时表


  

  一.先检查sql server版本是否支持JSON函数,不支持会提示:关键字 'with' 附近有语法错误。如果此语句是公用表表达式、xmlnamespaces 子句或者更改跟踪上下文子句,那么前一个语句必须以分号结尾。

  二.函数名:OPENJSON
  三.例子

  1.数据
  [

    {"CouponCode":"1913845574565660","CouponType":1,"CouponValue":50,"UsedValue":50,"Title":"50元现金券","Remark":""},

    {"CouponCode":"1913860576769040","CouponType":2,"CouponValue":12,"UsedValue":12,"Title":"娃娃菜","Remark":""},

    {"CouponCode":"1913874913739220","CouponType":2,"CouponValue":36,"UsedValue":36,"Title":"牛肉抵用券","Remark":""}

  ]

  2.代码

  DECLARE @json2 NVARCHAR(MAX);
  SET @json2 = N'要转换的json数据';

  SELECT * 

  FROM OPENJSON(@json2)
  WITH (
    CouponCode NVARCHAR(50),
    CouponType INT,
    CouponValue decimal,
    UsedValue decimal,
    Title varchar(200),
    Remark varchar(200)
  );

  执行结果
  

 

 

 

  四.通过游标遍历结果集,将JSON内容转换成行并插入临时表
  

  if object_id('tempdb..#DeptCoupon') is not null

    drop table #DeptCoupon

  create table #DeptCoupon --创建临时表#DeptCoupon
  (
    CouponCode NVARCHAR(80),
    CouponType INT,
    CouponValue decimal,
    UsedValue decimal,
    Title varchar(200),
    Remark varchar(200)
  );

  

  declare @DeptName nvarchar(2000),@StartDate nvarchar(50),@AdditionalData nvarchar(2000)

  declare order_cursor cursor --定义游标
  for (select DeptName,CONVERT(varchar(100), StartDate, 23),AdditionalData from tableName) --为游标赋值一个数据集
    open order_cursor --打开游标
    etch next from order_cursor into @DeptName,@StartDate,@AdditionalData --开始循环游标变量(从数据集中拿出第一条数据)
  while @@FETCH_STATUS = 0 --返回被 FETCH语句执行的最后游标的状态 (固定写法)
    begin

      insert into #DeptCoupon
      SELECT @DeptName as 'DeptName',@StartDate as 'StartDate',*
      FROM OPENJSON(@AdditionalData)
      WITH (
        CouponCode NVARCHAR(50),
        CouponType INT,
        CouponValue decimal,
        UsedValue decimal,
        Title varchar(200),
        Remark varchar(200)

      )

      fetch next from order_cursor into @DeptName,@StartDate,@AdditionalData --转到下一个游标(取下条数据集)
    end
  close order_cursor -- 关闭游标
  deallocate order_cursor -- 释放游标

  

  

 

 

 


  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM