sqlserver如何快速生成不重複的隨機資料

2021-08-21 22:35:18 字數 1820 閱讀 9510

/*1. 如何生成8位隨機數,生成的數越隨機,重複的可能性當然越小

2. 控制不重複

3. 考慮效能

針對這個問題,我寫了如下的示例來解決,希望能為有這類需求的人提供指導

*/use tempdb

go–建立測試表

create table tb(id char(8))

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

create unique index ix_tb on tb(id)

with ignore_dup_key

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

declare @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

–方法1直接插入

insert tb select id = right(100000000 + convert(bigint, abs(checksum(newid()))), 8)

–方法2用引數

–declare @id char(8)

–select @id = right(100000000 + convert(bigint, abs(checksum(newid()))), 8)

–insert into tb(欄位1) values(@id)

from syscolumns c1,syscolumns c2

set @row = @row - @@rowcount

end–顯示插入資料使用的時間

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

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

select count(*) from tb

set rowcount 0

set nocount off

go–刪除測試

drop table tb

/* 解決中用到的技巧:

1.控制產生的資料不重複,直接使用唯一索引中的 ignore_dup_key 選項,使插入資料中的重複值自動過濾,避免手工處理重複

2.使用 checksum 配合 newid() 函式,使生成的資料盡量隨機,一般生成隨機數會考慮使用 rand() 函式,

但這個函式是產生偽隨機值,用下面的語句測試一下,會發現產生的資料全部是一樣的,這不適用於想批量生成多個隨機數,

而newid() 函式生成的是guid,基本上不會有重複的,再通過checksum將其轉化成數字,這樣產生重複的可能性會比較小

select top 10 rand() from sysobjects

3.在效率控制,使用迴圈+批量生成的方式,而不是傳統的逐個生成。在sql server中,每個插入語句都會有乙個內部的事務處理,

如果逐條插入,則事務的開銷太大,效率勢必非常低;不考慮一次性生成100萬資料,一則因為生成的資料可能有重複的,

去掉重複就沒有100萬了,二則一次性生成100萬資料,消耗的記憶體和cpu資源也很高,一般的電腦可能承受不住

*/

SQL Server 如何生成更改指令碼

您可以選擇在使用表設計器時儲存更改指令碼。更改指令碼是乙個包含以後可以應用到資料庫 通過在解決方案資源管理器中選擇更改指令碼並從快捷選單上選擇 執行 的更改的檔案。如果還沒有準備好更新資料庫,可以選擇儲存更改指令碼。例如,您對錶設計器中的表所做的更改可能與其他使用者所做的更改有衝突,或者您當前可能沒...

如何快速生成企業Web應用

隨著網際網路的發展,企業認識到 電子化 和 無紙化 辦公是一種必然趨勢,但是企業在資訊化建設中經常望而卻步,主要原因是高昂的建設成本與不可以預估的結果風險。另外軟體服務商經常會面對客戶不斷調整的需求變化,遲遲不能交付,客戶不滿意遲遲不在驗收報告簽字,導致軟體服務商投入的成本無法及時 由於上述的原因,...

Sql Server快速入門

sql server快速入門 1.資料庫的建立,刪除 備份,分離 附加 注意 資料庫在開啟使用時,無法進行複製,貼上,需要對其進行分離,再複製貼上,然後通過附加,載入回去。注意 在對資料庫進行附加操作時,如果遇到訪問被拒絕,可能是許可權問題,對許可權進行修改即可。如圖 2.資料庫的基本操作 注意 如...