首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 隨機函數 NEWID() 與 RAND() 深度解析與實戰技巧

     編輯:關於SqlServer

兩大隨機函數對比

函數返回類型典型用途特點
NEWID()UNIQUEIDENTIFIER隨機排序、抽樣、生成全域唯一 ID每次呼叫產生新 GUID,跨機器唯一
RAND()FLOAT (0~1)生成隨機小數、配合數學函數產生隨機整數可指定種子值,同種子序列固定

NEWID() 實戰範例

1. 隨機排序與抽樣

-- 隨機排序全表
SELECT * FROM Northwind..Orders ORDER BY NEWID();

-- 取隨機 10 筆
SELECT TOP 10 * FROM Northwind..Orders ORDER BY NEWID();

2. 變數賦值與輸出

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() 進階用法:產生指定範圍隨機整數

RAND() 回傳 0~1 之間浮點數,實務上常需整數。兩種主流做法:

方法一:FLOOR (範圍 0 ~ N-1)

-- 產生 0~99 的隨機整數
SELECT CAST(FLOOR(RAND() * 100) AS INT);

方法二:CEILING (範圍 1 ~ N)

-- 產生 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() 開銷極小,適合即時計算。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved