使用SQL Server 2017我想出了如何解析包含单个JSON文档的单个JSON文件,以便存储在表中。
但是,我需要能够处理包含许多JSON文档的文件。是否有内置函数来执行此操作?或者任何人都可以解释如何做到这一点?
答案 0 :(得分:1)
在某种程度上重复自己,但我想我已经弄明白了。
我使用此语法查询文件:
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
这返回了我想要的内容。
答案 1 :(得分: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
答案 2 :(得分:0)
我已经尝试了上面的脚本来加载文件夹中的multipe json文件。 它没有按预期工作,然后我对此做了一些基础工作,并使用动态sql完成了该任务。
假设一个文件夹中有3个文件,并且您想按照以下脚本将这些json文件加载到sql server中。效果很好。
DECLARE @i INT = 1 声明@SQL Varchar(200) 声明@file Varchar(100)
WHILE(@i <4) 开始 SET @file ='''E:\ DrugBank \ json1'+ cast(@i AS VARCHAR(5))+'.json'''; - 选择文件 SET @ SQL ='INSERT INTO json_table SELECT * FROM OPENROWSET(BULK'+ @ file +',SINGLE_CLOB)AS e'
PRINT @SQL
EXEC (@SQL)
SET @i = @i + 1 ;
END