Get a random sample of rows in SQL Server 2000

Here's how to randomly sample a query's rows with Microsoft SQL Server.

There are occasions when a random sample of a query's rows are needed. A simple but non-functioning solution is

to include the system random number generator function within the query. Unfortunately, a single random number is generated for the query when what is desired is a random number for each row.

Another solution that is only available with SQL Server 2000 is to use a User Defined Function (UDF) to wrap the system random number generator. Since UDFs are invoked on a row-by-row basis, this approach theoretically could work. Unfortunately (again), Microsoft has restricted the usage of nondeterministic system functions that change the global state of the database. This includes the usage of the random number generator.

But there is a workaround for non-deterministic functions, which is to first create a view, then create a UDF that selects from the view and finally, reference the UDF in the query. Here's an example:

use master
go
create view dbo.RandomNumbers
(RandomNumber)
as select rand( ) as RandomNumber
GO
CREATE FUNCTION dbo.RandomNumberGet ( )
RETURNS real
AS
BEGIN
declare @r real
set @r = (select RandomNumber from RandomNumbers)
return @r
END
go
use Northwind
go
select  RandomNumber 
, OrderID
,  CustomerID
,  EmployeeID
FROM  (select  CAST(master.dbo.RandomNumberGet() * 100 as integer)  as RandomNumber
, OrderID
,  CustomerID
,  EmployeeID
from  Orders
) As RandomOrders
Order by RandomNumber


This was first published in February 2005

Dig deeper on Microsoft SQL Server 2000

Pro+

Features

Enjoy the benefits of Pro+ membership, learn more and join.

0 comments

Oldest 

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

SearchBusinessAnalytics

SearchDataCenter

SearchDataManagement

SearchAWS

SearchOracle

SearchContentManagement

SearchWindowsServer

Close