首先:您對我隨機的方式有什麼看法?這種方式太窮了嗎?優化隨機T-SQL
我有一個表TABLE_A:
id | name | state
---------------------|----------
1703248 | blablabla | 1
... | blablabla | 0
7873415 | blablabla | 1
7926033 | blablabla | 1
id列可以包含alfanumeric值太像 'ZXG-76354GH-34347' 例如。 那麼,我有3060條記錄。
詳細信息:
select count(1) from TABLE_A where id like 'n%'
如果:
是隨機n=1 ---> 201 records , n=2 ---> 147 records , n=3 ---> 187 records
n=4 ---> 327 records , n=5 ---> 430 records , n=6 ---> 503 records
n=7 ---> 1175 records , n=8 ---> 35 records , n=9 ---> 55 records
我的存儲過程:
--Name: Randomize_sp
BEGIN
DECLARE @temp table(id varchar(50))
--RANDOM 1
INSERT INTO @temp
SELECT id FROM TABLE_A
WHERE state > 0
ORDER BY RAND(CHECKSUM(NEWID()))
--RANDOM 2
SELECT top 1 id FROM @temp ORDER BY RAND(CHECKSUM(NEWID()))
END
我調用存儲過程多次或 'N' 次(我需要要做到這一點):
BEGIN
DECLARE @nTimes int, @i int
DECLARE @tempT table(id varchar(50))
SET @nTimes = 12
SET @i = 0
WHILE @i < @nTimes
BEGIN
INSERT INTO @tempT
EXECUTE MyDB.dbo.Randomize_sp
SET @i = @i + 1
END
SELECT id FROM @tempT
END
問題是:總是我得到以'7'開頭的4或5行,有時我得到以'5'開頭的3或2行......我想 以避免重複。我讚賞任何建議。
謝謝。
我真的不明白你想要做什麼。你想隨機化Id值嗎?你的意思是你想要50個隨機字符? – Lamak 2011-12-22 21:53:05
是的,我想要隨機化Id值,但我用ORDER BY RAND(CHECKSUM(NEWID()))來做,但我需要避免重複,如'743432'和'75469',兩者都以'7'開始,I不要這樣或者我需要減少這種重複,我認爲我得到了重複,因爲幾乎50%的總數是以'7'開頭的記錄,所以具有這種模式的Ids有更多的概率。 – jlrvpuma 2011-12-22 22:01:52
在這種情況下,您可以使用'NEWID()'作爲您的ID。但是如果你想要真正的隨機字符可以從1到50,那麼你需要一個更復雜的算法 – Lamak 2011-12-22 22:06:34