sql - 将每个表行导出到 SQL Server 中的 JSON 文件
问题描述
我有一个名为 LineItems 的表,如下所示:
CREATE TABLE [dbo].[LineItems]
(
[Id] BIGINT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR(255) NULL,
[StartDate] DATETIME2(7) NULL,
[EndDate] DATETIME2(7) NULL,
[Status] TINYINT DEFAULT (CONVERT([tinyint], (0))) NOT NULL,
);
我需要将此表中的每一行导出到单个 JSON 文件 ({id}.json)。我已经尝试过FOR JSON
SQL Server 支持的子句(使用 FOR JSON 将查询结果格式化为 JSON)。
询问
SELECT TOP 3
Id,
[Name],
StartDate,
EndDate,
[Status]
FROM
[dbo].[LineItems]
FOR JSON PATH
结果
[{
"Id": 1,
"Name": "line item 1",
"StartDate": "2021-01-19T00:00:00",
"EndDate": "2021-01-22T00:00:00",
"Status": 0
}, {
"Id": 2,
"Name": "line item 2",
"StartDate": "2021-02-02T00:00:00",
"EndDate": "2021-02-03T00:00:00",
"Status": 1
}, {
"Id": 3,
"Name": "line item 3",
"StartDate": "2021-02-21T00:00:00",
"EndDate": "2021-02-23T00:00:00",
"Status": 0
}]
问题是输出是一个文件中的多行。我找不到为每一行获取单个 JSON 文件的方法。 所需的结果文件示例是:
1.json
{
"Id": 1,
"Name": "line item 1",
"StartDate": "2021-01-19T00:00:00",
"EndDate": "2021-01-22T00:00:00",
"Status": 0
}
2.json
{
"Id": 2,
"Name": "line item 2",
"StartDate": "2021-02-02T00:00:00",
"EndDate": "2021-02-03T00:00:00",
"Status": 1
}
3.json
{
"Id": 3,
"Name": "line item 3",
"StartDate": "2021-02-21T00:00:00",
"EndDate": "2021-02-23T00:00:00",
"Status": 0
}
解决方案
您可以转换当前查询以便嵌套在OPENJSON
函数中,例如
SELECT CONCAT(JSON_VALUE([value],'$.Id'),'.JSON') AS [file], [value]
FROM OPENJSON(
(SELECT TOP 3 * FROM [dbo].[LineItems] FOR JSON PATH)
)
whereJSON_VALUE([value],'$.Id')
用于提取Id
值,如果需要单独选择以获取相关文件的名称。
推荐阅读
- tampermonkey - 无论焦点是否在 iframe 上,如何添加键盘快捷键?
- api - 未超过限制时,Google Calendar API 会出现 403 Quota exceeded 错误
- c - 不使用 printf 打印双精度
- bootstrap-4 - 列表组项目不显示颜色,如何解决?
- java - 使用方法读取数组用户输入(Java)
- haskell - 使用 hpack (package.yaml) 时从“堆栈构建”中临时排除文件
- python - Selenium python 脚本独立运行完美。但是当我将相同的代码嵌入到我的网络应用程序中时,它会给出错误
- javascript - 比较 2 个对象数组并使用 Ramda.js 获取详细信息
- python - 将图形从字典形式转换为python中的矩阵
- javascript - 如何将日期字符串从 MM DD YYYY 重新排列为 YYYY MM DD?