导出为 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 实现。

https://docs.microsoft.com/en-us/sql/relational-databases/json/format-query-results-as-json-with-for-json-sql-server?view=sql-server-2017

这两个将生成两个 json 数组,如果组合在一起将为您提供所需的格式。

这两个属性: Sync BySync 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