在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/

使用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子句:

  • 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對象。比如:

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表中的一列。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章