本篇文章圖片已經毀損,請參考:https://dog0416.blogspot.com/2018/01/databasesqlserver-new.html
會接觸到 NEWID() 這個函式,主要在系統功能實作上需要從資料表中隨機取得資料,經過某些處理後,定時從 hangfire 觸發程式再透過 SignalR 提供給前端顯示。因為主要邏輯是從 Stored procedure 撰寫而成,理所當然,隨機取得資料的實作也是寫在 Stored procedure。
NEWID () 主要隨機建立類型 uniqueidentifier 資料,如下範例所示,每一次產生的 Id 皆不同
註:uniqueidentifier 與 GUID 相同,使用的 16 位元組二進位值,為全球唯一識別碼。
DECLARE @Id uniqueidentifier
SET @Id = NEWID()
SELECT @Id
直接 SELECT NEWID()
與前言描述相同,將 NEWID() 使用在 ORDER BY 上,資料表隨機排列資料(以 Study4TW 官網活動資料表為例)
SELECT *
FROM [dbo].[Activity]
ORDER BY NEWID()
如果加上 TOP N 語法,就達到目的,隨機取的 N 筆資料
SELECT TOP 3 *
FROM [dbo].[Activity]
ORDER BY NEWID()