如何从存储过程中检索N个随机记录?
答
尝试使用动态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
答
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()')
[按性能随机排序](http://stackoverflow.com/questions/6680310/random-order-by-performance) – 2013-02-26 09:35:24