SQL Server2016 原生支援JSON
SQL Server 2005 開始支援 XML 資料類型,提供原生的 XML資料類型、XML 索引以及各種管理 XML 或輸出 XML 格式的函數。
在 SQL Server 時隔 4 個主要版本之後,終于在 Microsoft Ignite 2015 大會上正式宣布,新一代的 SQL Server 2016 正式支援現在最流行的資料交換格式— JSON(JavaScript Object Notation)。
SQL Server 2016 對JSON的支援并不是增加一個JSON資料類型,而是提供一個更輕便的架構,幫助使用者在資料庫裡處理JSON格式資料。
使用者不需要更變現有的表結構,因為SQL Server使用NVARCHAR 資料類型來存儲JSON檔案,并且跟現有技術互相相容,比如全文搜尋、列存儲索引、in-memory OLTP,應用程式不需要做任何修改
不需要使用JSON.Net這類工具分析和處理JSON資料,利用SQL Server内置函數就可以處理JSON資料,輕松将查詢結構輸出為JSON格式,或者搜尋JSON檔案内容。
使用 JSON AUTO 輸出JSON 格式
要将select語句的結果以JSON輸出,最簡單的方法是在後面加上 FOR JSON AUTO
測試版本
Microsoft SQL Server 2016 (CTP2.2) - 13.0.407.1 (X64) Jul 22 2015 21:19:11 Copyright (c) Microsoft Corporation Enterprise Evaluation Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)
SELECT * FROM [dbo].[Client]
GO
SELECT * FROM [dbo].[Client] FOR JSON AUTO
GO
我們可以把每列中顯示的最大字元數 設定為8192
加上Root Key
如果想為FOR JSON 加上Root Key,可以使用ROOT選項來指定 Root Key 名稱
SELECT * FROM [dbo].[Client] FOR JSON AUTO,ROOT('SUSU')
GO
使用JSON PATH 輸出JSON格式
當想要自定義輸出JSON格式結構的時候,必須用JSON PATH描述,若SELECT 的字段名稱相同,必須用别名方式來重新命名字段名這樣才可以繼續查詢
另外,如果字段的預設值為NULL,那麼輸出JSON時,JSON會忽略null的隻。如果要顯示null值,可以加上INCLUDE_NULL_VALUES 選項(同樣适用于JSON AUTO字句)
select * from [dbo].[Client]
--FOR JSON PATH
SELECT * FROM [dbo].[Client] WHERE ClientID =2
FOR JSON PATH
[{"ClientID":2,"Firstname":"Peter","Lastname":"Nielsen","Birthdate":"1998-05-19T00:00:00","Email":"[email protected]","PhoneNumber":"+86-16326269674","Birthplace":"Stockholm","SocialSecurityNumber":"1901531234"}]
--FOR JSON PATH
SELECT * FROM [dbo].[Client] WHERE ClientID =4
FOR JSON PATH,INCLUDE_NULL_VALUES
[{"ClientID":4,"Firstname":"kade","Lastname":null,"Birthdate":"1980-01-06T00:00:00","Email":"[email protected]","PhoneNumber":"+86-16326269674","Birthplace":"Aalborg","SocialSecurityNumber":"1061234"}]
更多關于JSON的功能
目前SQL Server 2016 CTP2 對于JSON的功能支援還是比較有限,例如内置處理JSON格式化的函數,
ISJSON(判斷是否是JSON格式)、JSON_VALUE(分析JSON檔案并提取出值) 、OPENJSON(将JSON檔案轉換為普通資料表)
這些功能要等到CTP3才能陸續推出
更多SQL Server2016好用的功能,敬請期待o(∩_∩)o
轉載于:https://www.cnblogs.com/lyhabc/p/4747694.html