100萬個不重複的8位的隨機數

2022-04-29 12:21:10 字數 2982 閱讀 4278

**use

tempdb

go--

建立測試表

create

table

tb(id 

char(8

))--

建立用於自動過濾重複值的唯一索引

create

unique

index

ix_tb 

ontb(id)

with

ignore_dup_key 

go--

測試資料插入的處理時間, 記錄開始處理的時間點

declare

@dtdatetime

set@dt

=getdate

()--

插入隨機資料

setnocount 

ondeclare

@row

intset

@row

=1000000

--設定總記錄數

while

@row

>

0begin

--顯示提示資訊, 表示還需要插入多行資料

raiserror('

need %d rows', 

10, 1, 

@row

) with

nowait

--插入隨機的位編碼資料

setrowcount

@row

insert

tb select

id =

right

(100000000

+convert

(bigint

, abs

(checksum(

newid

()))), 8)

from

syscolumns c1, syscolumns c2

set@row

=@row

-@@rowcount

end--

顯示插入資料使用的時間

select

begindate 

=@dt

, enddate 

=getdate

(), 

second 

=datediff

(second, 

@dt, 

getdate

()),

go--

顯示最終的結果記錄是否正確

select

count(*

) from

tbgo

--刪除測試

drop

table

tbdeclare @dt datetime

set @dt = getdate()

set nocount on --不返回影響的行數,可以提高效率

declare @row int

set @row = 1000000

while @row >0

begin

raiserror('need %d rows', 10, 1, @row) with nowait --有重複行發生的時候把資訊輸出到客戶端

set rowcount @row --select ... from syscolumns c1, syscolumns c2的行數會超過100w,這裡只取100w

insert testtb(code) select ---一次性的插入100w條記錄,如果有重複的記錄,那需要第二次執行插入,以此類推,一直到插入100w條為止。

id = 'abcd' + right(100000000 + convert(bigint, abs(checksum(newid()))), 8)--100000000用來確保生成的隨機數字有8位長度,

from syscolumns c1, syscolumns c2 --這裡使用syscolumns只是為了獲得大於100w的記錄而已。至於隨機的**是個這個表是沒有關係的。

set @row = @row - @@rowcount --根據影響的行數,設定迴圈的時候需要插入的記錄數量,這個記錄數量等於本次操作中重複的記錄的行數。

end

select begindate = @dt, enddate = getdate(), second = datediff(second, @dt, getdate())

go select count(*) from testtb

go /*我的問題是

(1)為什麼使用checksum()來生成隨機數字?

(2)newid是生成乙個唯一標誌,既然它是唯一性的,怎麼會又有重複的呢?

(3)

返回按照表的某一行或一組表示式計算出來的校驗和值。checksum 用於生成雜湊索引。

雜湊表索引是數字型的嗎?

*/   

raiserror('need %d rows', 10, 1, @row) with nowait --有重複行發生的時候把資訊輸出到客戶端

-- 這個是直接給提示資訊, 有重複時的提示資訊是sql自動丟擲的

insert testtb(code) select ---一次性的插入100w條記錄,如果有重複的記錄,那需要第二次執行插入,以此類推,一直到插入100w條為止。

-- 有重複的資料的時候, 重複的資料會自動過濾掉  

checksum

返回在表的行上或在表示式列表上計算的校驗值。checksum 用於生成雜湊索引。

語法 checksum ( * | expression [ ,...n ] )

引數 *

指定在表的所有列上進行計算。如果有任一列是非可比資料型別,則 checksum 返回錯誤。不可比資料型別是 text、ntext、image、cursor 以及基本型別為前 4 個資料型別之一的 sql_variant。

expression

是除非可比資料型別之外的任何型別的表示式。

返回型別

int

000

Jmeter生成8位不重複的隨機數

預設該公式精確到毫秒級別,13位數 該公式精確到秒級別,10位數 如果引數需要為當前日期,那公式為 要求 對註冊介面進行100000次壓測,手機號已126開頭,後面的8位數不限 前言 在進行測試中,我們需要對註冊介面進行壓測100000次,那麼就要求手機號碼每次填寫的不一致,否則手機號使用一次後會出...

java實現100個不重複隨機數

前幾天,做了這個題目。發現實現起來有不同的路子。1.是隨便對int陣列內的數進行調換。2.是建立兩個陣列,乙個是1 100,另乙個從其中隨機取值。這裡可以設定乙個end變數記錄取值長度。1.public class randomarr for int i 0 i 100 i 2.public cla...

C 生成100 不重複的隨機數

方法1 思想是用乙個陣列來儲存索引號,先隨機生成乙個陣列位置,然後把這個位置的索引號取出來,並把最後乙個索引號複製到當前的陣列位置,然後使隨機數的上限減一,具體如 先把這100個數放在乙個陣列內,每次隨機取乙個位置 第一次是1 100,第二次是1 99,將該位置的數用最後的數代替。int index...