如何从存储过程中检索N个随机记录?

问题描述:

如何从一组X记录中检索N个随机记录。例如,如果我们的网站上有一个包含2000个链接到不同页面的表格,我们如何检索10个随机记录?如何从存储过程中检索N个随机记录?

+2

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

尝试使用动态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 

SELECT TOP 10 * 
FROM tableName 
ORDER BY NEWID() 

declare @numberOfRecordsToGet int = 5 
select top (@numberOfRecordsToGet) * from name_of_your_tbl order by newid() 

使用这种在存储过程

申报@N VARCHAR(10)

组@ N = '10'

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