2017-03-15 37 views
1

使用SQL 2016 JSON內置函數Return鍵和JSON字符串從SQL 2016查詢

表:用戶 列(ID INT,姓VARCHAR(50),姓氏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 

回答

3

與交叉的協助申領

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

Heya John http://chat.stackoverflow.com/rooms/138432/room-for-sqlzim-and-john-cappelletti – SqlZim

0

這種形式可能會比使用交叉在某些情況下應用更具可讀性。
在我嘗試過的情況下,執行計劃總是相同的,但是在任何給定的情況下,執行計劃可能都會比另一方執行得更好。

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