使用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