如何将多对象JSON批量导入SQL Server并提取全部货币数据
解决SQL Server中导入全部货币JSON数据的问题
我来帮你搞定这个问题!你目前的代码因为指定了$.currency."0"这个具体路径,所以只能抓取单个货币对象。要一次性导入所有5种货币,同时把JSON里的数字键(0、1、2、3、4)作为DefaultCurrencyCode字段的值,可以通过嵌套使用OPENJSON来实现,具体步骤如下:
修正后的完整SQL代码
DECLARE @JSON VARCHAR(MAX) SELECT @JSON = BulkColumn FROM OPENROWSET (BULK 'C:\dev\src\Client\config\common\config.json', SINGLE_CLOB) AS j -- 导入全部货币数据,同时获取JSON键作为DefaultCurrencyCode SELECT c.ISOCode, c.name, c.symbol, CAST(curr.key AS INT) AS DefaultCurrencyCode INTO TestTable2 FROM OPENJSON (@JSON, '$.currency') AS curr CROSS APPLY OPENJSON(curr.value) WITH ( ISOCode VARCHAR(10), name VARCHAR(50), symbol VARCHAR(50) ) AS c -- 验证结果 SELECT * From TestTable2
代码关键点解释
OPENJSON (@JSON, '$.currency') AS curr:这一步会遍历currency下的所有子对象,返回三个列:key(就是你需要的0-4数字)、value(每个货币的JSON对象字符串)、type(数据类型)。CROSS APPLY OPENJSON(curr.value) WITH (...) AS c:对每个curr.value(单个货币的JSON)进行解析,提取出ISOCode、name、symbol三个字段。CAST(curr.key AS INT) AS DefaultCurrencyCode:把curr.key(原本是字符串类型的"0""1"等)转换成INT类型,作为DefaultCurrencyCode的值存入表中。
运行这段代码后,你的TestTable2就会包含全部5条货币数据,每个数据的DefaultCurrencyCode对应JSON里的数字键啦。
内容的提问来源于stack exchange,提问作者GrahamNorton
相关产品推荐
相关产品推荐

