| 函數 | 返回類型 | 典型用途 | 特點 |
|---|---|---|---|
NEWID() | UNIQUEIDENTIFIER | 隨機排序、抽樣、生成全域唯一 ID | 每次呼叫產生新 GUID,跨機器唯一 |
RAND() | FLOAT (0~1) | 生成隨機小數、配合數學函數產生隨機整數 | 可指定種子值,同種子序列固定 |
-- 隨機排序全表 SELECT * FROM Northwind..Orders ORDER BY NEWID(); -- 取隨機 10 筆 SELECT TOP 10 * FROM Northwind..Orders ORDER BY NEWID();
DECLARE @myid UNIQUEIDENTIFIER; SET @myid = NEWID(); PRINT 'Value of @myid is ' + CONVERT(VARCHAR(255), @myid); -- 輸出範例:Value of @myid is 6F9619FF-8B86-D011-B42D-00C04FC964FF
注意:每台電腦產生的 GUID 皆不同,上述僅為示範。
RAND() 回傳 0~1 之間浮點數,實務上常需整數。兩種主流做法:
-- 產生 0~99 的隨機整數 SELECT CAST(FLOOR(RAND() * 100) AS INT);
-- 產生 1~100 的隨機整數 SELECT CAST(CEILING(RAND() * 100) AS INT);
| 函數 | 數學意義 | 範圍 (N=100) | 適用場景 |
|---|---|---|---|
| FLOOR | ≤ 給定值的最大整數 | 0 ~ 99 | 陣列索引、零基編號 |
| CEILING | ≥ 給定值的最小整數 | 1 ~ 100 | 人類直覺編號、抽獎號碼 |
為 RAND() 提供種子值,同種子產生固定序列,利於測試與除錯:
SELECT RAND(12345); -- 固定種子 SELECT RAND(); -- 無種子,每次不同
ORDER BY NEWID() 需全表掃描並排序,百萬級以上效能較差。考慮 TABLESAMPLE (SQL Server 2005+) 或應用層抽樣。NEWID() 或 NEWSEQUENTIALID() (插入效能更佳)。RAND() 開銷極小,適合即時計算。