SQL Server 分頁+json分享

1。SQL Server 版本2012+ 新增SQL分頁的寫法

最近封裝一個輕量級的ORM用到了分頁,以前只知道使用Row_Number函數,現在發現sqlserver 新增的 {orderBy} offset {start} rows fetch next {pageSize} rows only 也挺好用的。

簡單回顧下 sqlserver 各個版本支持分頁的方式。

  • SQL Server 2005 支持 top not in 寫法

  • SQL Server 2008 支持 Row_Number()寫法

  • SQL Server 2012 支持 OFFSET、FETCH NEXT 寫法

這也就是爲什麼Efcore連接SQL Server 2012之前的版本進行分頁操作會報異常“SqlException: 'OFFSET' 附近有語法錯誤。在 FETCH 語句中選項 NEXT 的用法無效。”的原因。

如果要使用2008進行分頁需要特殊的配置options.UseRowNumberForPaging();

  •  OFFSET、FETCH NEXT 寫法 取出頁碼(2)和一頁顯示的條數(20)的用戶數據語句如下

select * from Sys_UserInfo Order by SysNo  asc offset 20 rows fetch next 20 rows only;

offset 開始的行或者跳過的行 fetch next 取出排序後的多少行,是不是比之前的寫法方便多了。

2。SQL Server 版本2016+ 新增JSON功能

最近有個需求,用到存儲json的又不想使用其他文檔數據庫,剛好發現SQL Server新增了json功能。來看下簡單的驗證、檢索、編輯功能。

  •  定義json

[{
	"Code": "UserName",
	"ShowLable": "用戶名",
	"ShowText": ".NET",
	"IsShow": 1,
	"ShowSort": 1
}, {
	"Code": "RealName",
	"ShowLable": "真實名稱",
	"ShowText": "知音",
	"IsShow": 1,
	"ShowSort": 2
}]
  • 驗證是否是json

SELECT Id,QueryJson  FROM AA_QueryJson where ISJSON(QueryJson)>0

返回:

  • 檢索json

  SELECT TOP (1000) [Id]
      ,JSON_VALUE(QueryJson,'$[0].ShowLable') as ShowLable
	  ,JSON_VALUE(QueryJson,'$[0].ShowText') as ShowText
  FROM [AaCenter].[dbo].[AA_QueryJson]  where ISJSON(QueryJson)>0

返回:

  • 修改json

select JSON_MODIFY(QueryJson,'$[0].ShowText', 'dotNET')    from [AA_QueryJson];

返回:

當然有很多高級的功能如OPENJSON 行集函數可將 JSON 文本轉換爲一組行和列、嵌套操作等等。

參考:

https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2012/ms188385(v=sql.110)?redirectedfrom=MSDN

https://docs.microsoft.com/zh-cn/sql/t-sql/functions/json-functions-transact-sql?view=sql-server-ver15

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