【问题标题】:Return Key and JSON String from SQL 2016 Query从 SQL 2016 查询返回键和 JSON 字符串
【发布时间】:2017-03-15 17:39:47
【问题描述】:

使用 SQL 2016 JSON 内置函数

表:用户 列(ID int、FirstName varchar(50)、LastName varchar(50)

数据 3009 Emily Manners 3010 Joanne Hernandez 3011 Kelly Kleiner 3012 Alexis Frederick 3013 Dietric Singleton 3018 Ashley Ely 3021 Jeralynn Campbell-Triplett 3026 Lauren Zinnerman 3027 Christopher Correa 3028 Stefanie MontalvoCruz

想要的结果 -> 临时表

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

【问题讨论】:

    标签: sql sql-server json tsql sql-server-2016


    【解决方案1】:

    借助 CROSS APPLY

    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"}
    

    【讨论】:

    【解决方案2】:

    在某些情况下,此表单可能比使用交叉应用更具可读性。
    在我尝试过的情况下,执行计划总是相同的,但在任何给定情况下,一个执行计划可能比另一个执行得更好。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多