如何处理多个JSON文档

问题描述 投票:0回答:3

使用SQL Server 2017我想出了如何解析包含单个JSON文档的单个JSON文件以存储在表中。

但是,我需要能够处理包含许多JSON文档的文件。是否有内置函数来执行此操作?或者任何人都可以解释如何做到这一点?

sql-server json parsing
3个回答
1
投票

在某种程度上重复自己,但我想我已经想到了这一点。

  1. 我创建了一个包含500个单独JSON文档的文件
  2. 我手动添加了JSON特定的开始和结束支架球拍作为第一行和最后一行。
  3. 我用这种语法来查询文件: select SQ1.* from OPENROWSET (BULK 'C:\Users\Username\Documents\SQL Server Management Studio\Projects\json_files\dev_AllJsonDownload.json', SINGLE_CLOB) as mytest CROSS APPLY OPENJSON(BulkColumn) WITH (...colA ...colB ...colC ...colN ) as SQ1

这回归了我想要的。


0
投票

您可以使用OPENROWSET(BULK)将一组JSON文件从文件系统一次加载到一个局部变量中。假设文件名为book<index>.json

DECLARE @i INT = 1
DECLARE @json AS NVARCHAR(MAX)

WHILE(@i < 10)
BEGIN
    SET @file = 'C:\JSON\Books\book' + cast(@i AS VARCHAR(5)) + '.json';
    SELECT @json = BulkColumn FROM OPENROWSET (BULK (@file), SINGLE_CLOB) AS j
    SELECT * FROM OPENJSON(@json) AS json
    -- Optionally, save the JSON text in a table.
    SET @i = @i + 1 ;
END

Reference


0
投票

我已经尝试过上面的脚本来加载文件夹中的多个json文件。它没有按预期工作,然后我做了一些基础工作,并使用动态SQL实现了该任务。

假设您在一个文件夹中有3个文件,并且您希望将这些json文件加载到sql server中,请遵循此脚本。这很好用。

DECLARE @i INT = 1声明@SQL Varchar(200)DECLARE @file Varchar(100)

WHILE(@i <4)BEGIN SET @file ='''E:\ DrugBank \ json1'+ cast(@i AS VARCHAR(5))+'。json'''; - 选择@file SET @ SQL ='INSERT INTO json_table SELECT * FROM OPENROWSET(BULK'+ @ file +',SINGLE_CLOB)AS e'

   PRINT @SQL
   EXEC (@SQL)
   SET @i = @i + 1 ; 

结束

© www.soinside.com 2019 - 2024. All rights reserved.