2013-02-26 71 views
0

如何從一組X記錄中檢索N個隨機記錄。例如,如果我們的網站上有一個包含2000個鏈接到不同頁面的表格,我們如何檢索10個隨機記錄?如何從存儲過程中檢索N個隨機記錄?

+2

[按性能隨機排序](http://stackoverflow.com/questions/6680310/random-order-by-performance) – 2013-02-26 09:35:24

回答

1

嘗試使用動態SQL這樣的。請注意,這需要更多的工作,因爲某些邊緣案例不包括在內,例如返回0的COUNT()或記錄計數大於COUNT()等的案例。

CREATE PROCEDURE dbo.RandomNRecords 
(
@recordCount int 
) 
as 
begin 
declare @counter int 
declare @sqlQuery nvarchar(2000) 

SET @sqlQuery = ' 

CREATE TABLE #TempTable 
(
f1 varchar(50), 
f2 varchar(50), 
f3 int, 
id int identity(1,1) 
) 

INSERT INTO #TempTable 
SELECT f1, f2, f3 FROM Table1 

SELECT * 
FROM #TempTable 
WHERE id in (' 

SELECT @recordCount = COUNT(*) From Table1 

SET @counter = 0 
WHILE @counter < @recordCount 
BEGIN 
    SET @counter = @counter + 1 
    SET @sqlQuery = @sqlQuery + CONVERT(varchar,Round((@recordCount * Rand()), 0)) + ','  
END; 

SET @sqlQuery = SUBSTRING(@sqlQuery, 1, LEN(sqlQuery) - 1) --remove last comma 
SET @sqlQuery = @sqlQuery + ')' 

EXEC sp_executesql @sqlQuery 
END 
2
SELECT TOP 10 * 
FROM tableName 
ORDER BY NEWID() 
0
declare @numberOfRecordsToGet int = 5 
select top (@numberOfRecordsToGet) * from name_of_your_tbl order by newid() 
0

使用這種在存儲過程

申報@N VARCHAR(10)

組@ N = '10'

EXEC( 'SELECT TOP' + @ N + '* FROM tableName ORDER BY NEWID()')