0

合計XレコードのセットからN個のランダムレコードを取得するにはどうすればよいですか。たとえば、Webサイトのさまざまなページへの2000のリンクがあるテーブルがある場合、10個のランダムなレコードを取得するにはどうすればよいですか?

4

4 に答える 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
declare @numberOfRecordsToGet int = 5
select top (@numberOfRecordsToGet) * from name_of_your_tbl order by newid()
于 2013-02-27T04:12:30.107 に答える
0

ストアドプロシージャでこれを使用します

@N varchar(10)を宣言します

@ N='10'を設定します

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

于 2013-03-17T16:03:32.367 に答える