在Sql Server 2016中使用For Json子句把數據做爲json格式導出

原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/export-query-result-as-json-format-in-sql-server-2016/sql

使用for json子句把查詢結果做爲json字符串導出,將做爲sql server 2016中首先可用的一個特性。若是你熟悉for xml子句,那麼將很容易理解for json:數據庫

select ccolumn, expression, column as alias
    from table1, table2, table3
    for json [auto | path]

若是你把for json子句添加到T-SQL Select查詢語句的最後,SQL Server將會把結果格式化爲JSON字符串以後在返回到客戶端。每一行數據將會格式化爲一個json對象,每個數據字段將會成爲行對象的值,列名或者列的別名會做爲行對象的鍵。咱們有兩種類型的for json子句:express

  • FOR JSON Path,經過列名或者列別名來定義JSON對象的層次結構,列別名中能夠包含「.」,JSON的成員層次結構將會與別名中的層次結構保持一致。
    這個特性很是相似於早期SQL Server版本中的For Xml Path子句,可使用斜線來定義xml的層次結構。
  • FOR JSON Auto,自動按照查詢語句中使用的表結構來建立嵌套的JSON子數組,相似於For Xml Auto特性。

若是你用過PostgreSQL中涉及到JSON的函數和操做符,你會注意到,FOR JSON子句類等價於PostgreSQL中的JSON建立函數好比row_to_json或json_object。FOR JSON子句的主要目的是根據JSON規範把變量、列格式化爲JSON對象。好比:json

set @json = (select 1 as firstKey, getdate() as dateKey, @someVar as thirdKey for json path)
-- result is : {"firstKey": 1, "dateKey": "2016-06-15 11:35:21", "thirdKey": "Content of variable"}

FOR JSON子句主要應用場景:數組

    • 把須要返回給客戶端的一組對象序列化爲JSON。想象一下,在你建立JSON Web服務的時候,須要提供供應商信息及其產品信息(好比在OData服務中使用$extend選項)。你可能會查詢供應商列表,把每一個供應商信息格式化爲JSON對象並經過額外查詢來得到這個供應商的產品列表,將其轉化爲JSON對象數組附加到供應商對象。其餘方案可能會經過連接查詢來得到供應商和產品信息列表,使用客戶端代碼來格式化爲JSON對象(若使用Entity Framework將可能產生額外查詢)。使用for json子句,你能夠鏈接這兩個表進行查詢,添加你想要的前綴(定義JSON層次結構),在數據庫層完成JSON格式化工做。
    • 在一對多的父子表關係場景,你不想建立子表,而是想把子表的記錄以JSON數組的格式存儲做爲父表的一列。好比你不想把SalesOrderHeader和SalesOrderDetails數據分紅兩個表來保存,你能夠把每一個訂單的多個商品詳情格式化爲JSON數組保存到SalesOrderHeader表中的一列。
相關文章
相關標籤/搜索