sql - 如何在 SQL Server 的表列中添加从父 JSON 读取的 JSON 值?
问题描述
我正在尝试读取 JSON 并将值插入表中。在这些值中,还有一个 JSON 对象。我正在尝试将该 JSON 值插入到列中,但我的代码没有插入任何内容。
这是我到目前为止所尝试的:
DROP TABLE IF EXISTS #tmp
DECLARE @json NVARCHAR(MAX);
SET @json = N'[
{"id": 2, "info": {"name": "John", "surname": "Smith"}, "age": 25},
{"id": 5, "info": {"name": "Jane", "surname": "Smith"}, "dob": "2005-11-04T12:00:00"}
]';
SELECT [id], [info]
INTO #tmp
FROM OPENJSON(@json)
WITH
(
[id] NVARCHAR(100),
[info] NVARCHAR(max)
);
SELECT * FROM #tmp
这是我得到的结果:
id info
--------------
2 NULL
5 NULL
解决方案
如果我正确理解您的问题,您需要使用AS JSON
文档中提到的选项:
在列定义中使用 AS JSON 选项来指定引用的属性包含内部 JSON 对象或数组。如果您指定 AS JSON 选项,则列的类型必须是 NVARCHAR(MAX)。
陈述:
DECLARE @json NVARCHAR(MAX);
SET @json = N'[
{"id": 2, "info": {"name": "John", "surname": "Smith"}, "age": 25},
{"id": 5, "info": {"name": "Jane", "surname": "Smith"}, "dob": "2005-11-04T12:00:00"}
]';
SELECT [id], [info]
INTO #tmp
FROM OPENJSON(@json) WITH (
[id] NVARCHAR(100) '$.id',
[info] NVARCHAR(max) '$.info' AS JSON
);
结果:
id info
2 {"name": "John", "surname": "Smith"}
5 {"name": "Jane", "surname": "Smith"}
推荐阅读
- bash - “ set -- ${@:2} ” 在 bash shell 中是什么意思
- apache-kafka - 查找分配给 Kafka 流实例的分区
- ruby - 使用批量数组列表标记资源的良好做法
- angularjs - AngularJs 中的 Angular 过滤器
- nsis - NSIS如何通过插入连字符或在文本框中添加文本框来复制和粘贴文本,由fieldnum分隔
- android - 跟踪用户/google 执行的 Google Play 退款
- c# - 如何在没有 Linq 的情况下比较添加、删除和更改的两个列表?C#
- wordpress - 高级自定义字段是否可以内置到自定义 wordpress 主题中,即当用户安装主题时可以立即确定字段?
- c# - 如何在 Unity 运行时更改 AudioMixer 源
- python - 如何在 wxpython 中刷新 Grid 类?