如何从我们总共拥有的 X 条记录中检索 N 条随机记录。例如,如果我们有一个包含 2000 个指向我们网站上不同页面的链接的表,我们如何检索 10 条随机记录?
问问题
644 次
4 回答
2
SELECT TOP 10 *
FROM tableName
ORDER BY NEWID()
于 2013-02-26T09:33:40.330 回答
1
尝试像这样使用动态 SQL。请注意,这需要更多的工作,因为某些边缘情况未涵盖,例如 COUNT( ) 返回 0 或记录计数大于 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
于 2013-02-26T09:53:07.883 回答
0
在存储过程中使用它
声明@N varchar(10)
设置@N='10'
exec(' SELECT TOP '+@N+' * FROM tableName ORDER BY NEWID()')
于 2013-03-17T16:03:32.367 回答
0
declare @numberOfRecordsToGet int = 5
select top (@numberOfRecordsToGet) * from name_of_your_tbl order by newid()
于 2013-02-27T04:12:30.107 回答