My suggestion, on our SQL Server 2000 installation it finds all primes less than 5000000 in 54 seconds. But of course it depends on the hardware...
set nocount on
go
select top 5000000 identity(int, 1, 1) as Number into #Numbers
from syscomments c1 cross join syscomments c2
go
alter table #Numbers add constraint PK_Numbers primary key clustered (Number)
go
create table #Primes(prime int primary key)
go
declare @time datetime
select @time = getdate()
declare @i int
set @i = 1
while @i*@i < 5000000
begin
insert into #Primes
select n.Number
from #Numbers n
where
n.Number < (@i+1)*(@i+1) and n.Number > @i*@i
and not exists
(
select * from #Primes p
where p.prime < @i + 1 and n.Number % p.prime = 0
 
set @i = @i + 1
end
--select * from #Primes
select datediff(ms, @time, getdate())
drop table #Primes
go
drop table #Numbers
go