使用SQL Server 2017我想出了如何解析包含单个JSON文档的单个JSON文件以存储在表中。
但是,我需要能够处理包含许多JSON文档的文件。是否有内置函数来执行此操作?或者任何人都可以解释如何做到这一点?
在某种程度上重复自己,但我想我已经想到了这一点。
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
这回归了我想要的。
您可以使用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
我已经尝试过上面的脚本来加载文件夹中的多个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 ;
结束