导出为 JSON 格式
Export to JSON format
我有以下 2 table。实际上我需要将所有 table 相关和不相关的 table 同步到另一个数据库。我正在使用 SQL Server 2017。
CREATE TABLE EmailAddresses (
ID int,
EmailAddress varchar(255),
StartDate datetime,
EndDate datetime,
);
CREATE TABLE Cards (
ID int,
CardNumber varchar(255),
ValidFrom datetime,
ValidTo datetime,
CVC varchar(255),
);
我需要单个json文件中2table的所有记录(格式如下)。
{
"Sync By" : "XYZ",
"Sync Date" : "2021-10-16",
"EmailAddresses" : [
{
"EmailAddress" : "Aisha@AEL.com",
"StartDate" : "2015-11-12",
"EndDate" : "2019-06-21"
},
{
"EmailAddress" : "Elsie@Livulook.co.wm",
"StartDate" : "2014-02-09",
"EndDate" : "2015-12-23"
},
{
"EmailAddress" : "Harriet23@Zaha.com",
"StartDate" : "2013-07-26",
"EndDate" : "2018-04-16"
}
],
"Cards" : [
{
"CardNumber" : "340365242116610",
"ValidFrom" : "2015-07-28",
"ValidTo" : "2021-10-16",
"CVC" : "205"
}
]
}
您可以通过 for json
实现。
这两个将生成两个 json 数组,如果组合在一起将为您提供所需的格式。
这两个属性:
Sync By
和 Sync Date
不存在于数据库中,因此需要在导出时手动调整它们。
select 'XYZ' as 'Sync By',
select '2021-10-16' as 'Sync Date',
(select ID, EmailAddress, StartDate, EndDate,
from table EmailAddresses
for json path) EmailAddresses,
(select Id, CardNumber, ValidFrom, ValidTo, CVC
from table Cards
for json path) Cards
for json path
一种可能的方法是使用 FOR JSON AUTO
从两个表中导出数据,然后使用带有 WITHOUT_ARRAY_WRAPPER
选项的 FOR JSON PATH
生成最终输出:
表格:
CREATE TABLE EmailAddresses (
ID int,
EmailAddress varchar(255),
StartDate datetime,
EndDate datetime,
);
CREATE TABLE Cards (
ID int,
CardNumber varchar(255),
ValidFrom datetime,
ValidTo datetime,
CVC varchar(255),
);
INSERT INTO EmailAddresses
(ID, EmailAddress, StartDate, EndDate)
VALUES
(1, 'Aish"a@AEL.com', '2015-11-12', '2019-06-21'),
(2, 'Aisha@AEL.com', '2015-11-12', '2019-06-21'),
(3, 'Aisha@AEL.com', '2015-11-12', '2019-06-21')
INSERT INTO Cards
(ID, CardNumber, ValidFrom, ValidTo, CVC)
VALUES
(1, '340365242116610', '2015-07-28', '2021-10-16', '205')
声明:
SELECT
[Sync By] = 'XYZ',
[Sync Date] = '2021-10-16',
[EmailAddresses] = (
SELECT EmailAddress, StartDate, EndDate
FROM EmailAddresses
FOR JSON AUTO
),
[Cards] = (
SELECT CardNumber, ValidFrom, ValidTo, CVC
FROM Cards
FOR JSON AUTO
)
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
我有以下 2 table。实际上我需要将所有 table 相关和不相关的 table 同步到另一个数据库。我正在使用 SQL Server 2017。
CREATE TABLE EmailAddresses (
ID int,
EmailAddress varchar(255),
StartDate datetime,
EndDate datetime,
);
CREATE TABLE Cards (
ID int,
CardNumber varchar(255),
ValidFrom datetime,
ValidTo datetime,
CVC varchar(255),
);
我需要单个json文件中2table的所有记录(格式如下)。
{
"Sync By" : "XYZ",
"Sync Date" : "2021-10-16",
"EmailAddresses" : [
{
"EmailAddress" : "Aisha@AEL.com",
"StartDate" : "2015-11-12",
"EndDate" : "2019-06-21"
},
{
"EmailAddress" : "Elsie@Livulook.co.wm",
"StartDate" : "2014-02-09",
"EndDate" : "2015-12-23"
},
{
"EmailAddress" : "Harriet23@Zaha.com",
"StartDate" : "2013-07-26",
"EndDate" : "2018-04-16"
}
],
"Cards" : [
{
"CardNumber" : "340365242116610",
"ValidFrom" : "2015-07-28",
"ValidTo" : "2021-10-16",
"CVC" : "205"
}
]
}
您可以通过 for json
实现。
这两个将生成两个 json 数组,如果组合在一起将为您提供所需的格式。
这两个属性:
Sync By
和 Sync Date
不存在于数据库中,因此需要在导出时手动调整它们。
select 'XYZ' as 'Sync By',
select '2021-10-16' as 'Sync Date',
(select ID, EmailAddress, StartDate, EndDate,
from table EmailAddresses
for json path) EmailAddresses,
(select Id, CardNumber, ValidFrom, ValidTo, CVC
from table Cards
for json path) Cards
for json path
一种可能的方法是使用 FOR JSON AUTO
从两个表中导出数据,然后使用带有 WITHOUT_ARRAY_WRAPPER
选项的 FOR JSON PATH
生成最终输出:
表格:
CREATE TABLE EmailAddresses (
ID int,
EmailAddress varchar(255),
StartDate datetime,
EndDate datetime,
);
CREATE TABLE Cards (
ID int,
CardNumber varchar(255),
ValidFrom datetime,
ValidTo datetime,
CVC varchar(255),
);
INSERT INTO EmailAddresses
(ID, EmailAddress, StartDate, EndDate)
VALUES
(1, 'Aish"a@AEL.com', '2015-11-12', '2019-06-21'),
(2, 'Aisha@AEL.com', '2015-11-12', '2019-06-21'),
(3, 'Aisha@AEL.com', '2015-11-12', '2019-06-21')
INSERT INTO Cards
(ID, CardNumber, ValidFrom, ValidTo, CVC)
VALUES
(1, '340365242116610', '2015-07-28', '2021-10-16', '205')
声明:
SELECT
[Sync By] = 'XYZ',
[Sync Date] = '2021-10-16',
[EmailAddresses] = (
SELECT EmailAddress, StartDate, EndDate
FROM EmailAddresses
FOR JSON AUTO
),
[Cards] = (
SELECT CardNumber, ValidFrom, ValidTo, CVC
FROM Cards
FOR JSON AUTO
)
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER