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

SQL Server 生成 300 個不重複 8 位隨機數的高效腳本

     編輯:關於SqlServer

需求:產生 300 個 8 位數字(10000000~99999999),且不重複。以下腳本使用暫存表配合 NOT EXISTS 去重,簡單可靠:

DECLARE @i INT = 0;
DECLARE @j INT;
DECLARE @qnum INT = 300;  -- 目標筆數
SET NOCOUNT ON;

CREATE TABLE #temp_Table (num INT);

WHILE (@i < @qnum)
BEGIN
    -- 產生 8 位隨機數
    SELECT @j = CAST(FLOOR(RAND() * (99999999 - 10000000) + 10000000) AS INT);
    
    -- 不存在才寫入
    IF (NOT EXISTS (SELECT 1 FROM #temp_Table WHERE num = @j))
    BEGIN
        INSERT #temp_Table (num) VALUES (@j);
        SET @i += 1;
    END
END

SELECT DISTINCT num FROM #temp_Table;
DROP TABLE #temp_Table;

效能優化提示

  • 大量產生時,NOT EXISTS 配合索引效能佳;若筆數極大(萬筆以上),建議改用 NEWID() 排序取前 N 筆,或使用集合式寫法避免循環。
  • SET NOCOUNT ON 可減少網路傳輸開銷。

進階寫法(集合式,無循環)

;WITH cte AS (
    SELECT TOP 300 
        CAST(FLOOR(RAND(CHECKSUM(NEWID())) * 90000000) + 10000000 AS INT) AS num
    FROM sys.objects a CROSS JOIN sys.objects b
)
SELECT DISTINCT num FROM cte;

利用系統表交叉產生足夠列數,再取不重複前 300 筆,效能遠優於循環。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved