从SQL 2016查询返回键和JSON字符串
使用SQL 2016 JSON内置函数 表:用户 列(ID int、FirstName varchar(50)、LastName varchar(50) 资料从SQL 2016查询返回键和JSON字符串,sql,sql-server,json,tsql,sql-server-2016,Sql,Sql Server,Json,Tsql,Sql Server 2016,使用SQL 2016 JSON内置函数 表:用户 列(ID int、FirstName varchar(50)、LastName varchar(50) 资料 3009艾米丽礼仪 3010乔安妮·埃尔南德斯 3011凯利克莱纳 3012亚历克西斯·弗雷德里克 3013饮食单体 3018艾希礼·伊利 3021 Jeralynn Campbell Triplett 3026劳伦·辛纳曼 3027克里斯托弗·科雷亚 3028斯蒂芬妮·蒙塔沃克鲁兹 所需结果->临时表 ID JSON_D
3009艾米丽礼仪
3010乔安妮·埃尔南德斯
3011凯利克莱纳
3012亚历克西斯·弗雷德里克
3013饮食单体
3018艾希礼·伊利
3021 Jeralynn Campbell Triplett
3026劳伦·辛纳曼
3027克里斯托弗·科雷亚
3028斯蒂芬妮·蒙塔沃克鲁兹
所需结果->临时表
ID JSON_DATA
3009 {"ID":3009,"FirstName":"Emily","LastName":"Manners"}
3010 {"ID":3010,"FirstName":"Joanne","LastName":"Hernandez"}
正在尝试使用:
SELECT
[ID],
[FirstName],
[LastName]
FROM Emp
FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER
在十字架的帮助下申请
Declare @Emp table (ID int,FirstName varchar(50),LastName varchar(50))
Insert into @Emp values
(3009,'Emily' ,'Manners'),
(3010,'Joanne','Hernandez'),
(3011,'Kelly' ,'Kleiner')
Select A.ID
,B.JSON_Data
From @Emp A
Cross Apply (
Select JSON_Data = (Select A.ID,A.FirstName,A.LastName FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER)
) B
返回
ID JSON_Data
3009 {"ID":3009,"FirstName":"Emily","LastName":"Manners"}
3010 {"ID":3010,"FirstName":"Joanne","LastName":"Hernandez"}
3011 {"ID":3011,"FirstName":"Kelly","LastName":"Kleiner"}
在某些情况下,此表单可能比使用交叉应用更具可读性。
在我尝试过的情况下,执行计划总是相同的,但在任何给定的情况下,其中一个可能比另一个执行得更好
Declare @Emp table (ID int,FirstName varchar(50),LastName varchar(50))
Insert into @Emp values
(3009,'Emily' ,'Manners'),
(3010,'Joanne','Hernandez'),
(3011,'Kelly' ,'Kleiner')
Select A.ID
,(Select A.ID,A.FirstName,A.LastName
FOR JSON PATH, INCLUDE_NULL_VALUES,
WITHOUT_ARRAY_WRAPPER) AS JSON_Data
From @Emp A
嗨,约翰