1
我正在使用CTE(而不是循環)使用以下查詢生成隨機數。奇怪的是,查詢不會在索引值2後生成隨機數。您可以查看demo here。對CTE的這種行爲有任何解釋嗎?使用CTE的SQL Server隨機數
;with LoopCounter
as(
select 1 Indexer, RAND() RandNumber
union all
select Indexer + 1, RAND() RandNumber
from LoopCounter
where
Indexer <= 1000
)
select *
from LoopCounter
OPTION(MAXRECURSION 0)
您可以添加索引作爲種子RAND():...'選擇索引+ 1,RAND(索引+ 1)RandNumber' ... –
'RAND(校驗(NEWID( )))'會提供更好的分配。至於'爲什麼'參見[RAND是一個運行時常量](http://www.sqlskills.com/blogs/conor/wrapping-my-head-around-rand-sql-server/) –
有多種優化這會阻止RAND()被多次評估(或者在你的情況下,一次爲錨,一次爲遞歸部分)。這是一個想法來阻止:http://sqlfiddle.com/#!6/72319/4(這也包括保羅的建議,它不依賴左窗格中的任何架構)。 –