当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 在SQLSERVER2005中实现素数计算

MSSQL
mssql server 存储过程里,bulk insert table from ''路径+文件'',路径固定,文件名不固定的实现方法
请问在mssql“SQL事件探查器”里表格的标题,如CPU,Read,Write,Duration,SPID.........的解释
mssql server .ldf和.mdf的文件附加数据库的sql语句
[js]javascript与剪贴板交互
mssql中得到当天数据的语句
在SQL中使用convert函数进行日期的查询的代码
sql server中datetime字段去除时间的语句
sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
推荐SQL Server 重新恢复自动编号列的序号的sql代码
清空MSSQL日志 与set recovery simple
mssql2005注入方法小结
[原创]比较详细的完美解决安装sql2000时出现以前的某个程序安装已在安装计算机上创建挂起的文件操作。
sql语句中如何将datetime格式的日期转换为yy-mm-dd格式
重装MS SQL Server 2000前必须彻底删除原安装文件的方法
SQL Server 不删除信息重新恢复自动编号列的序号的方法
MSSQL差异备份取系统权限的相关软件下载
解决MSSQL2005远程连接sql2000非默认端口数据库的问题
SQL命令大全-中英文对照
用SQL语句实现随机查询数据并不显示错误数据的方法
sql server不存在 sql server拒绝访问

MSSQL 中的 在SQLSERVER2005中实现素数计算


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 46 ::
收藏到网摘: n/a

 

我将提出一个挑战,谁能用SQLSEERVER提出计算素数最好的方法,
我用了一个新的特点CTE和某些TSQL实现,但均不理想,前者(CTE)有限制,而后者(TSQL)产生一百万个素数用了7分种
你可以干的更好么?
这儿是我的一些代码段落

(TSQL实现)
set nocount on
declare @prime table (prime int not null primary key)
--insert into @prime values (2)
--insert into @prime values (3)
--insert into @prime values (5)
--insert into @prime values (7)
--insert into @prime values (11)
declare @number int, @pc int
set @number = 13
set @pc = 1
while @pc < 1000000
begin

   if not exists (select 1 from @prime where @number % prime = 0 and prime < sqrt(@number) )
   begin
      insert into @prime select @number
      set @pc = @pc +1
   end
   set @number = @number
            + case when @number %2 = 1 then 2
                   when @number %3 = 2 then 2
                   when @number %5 = 4 then 2
                   when @number %7 = 6 then 2
                   when @number %11 = 10 then 2
              else 1 end
   end
select @pc


(CTE实现)

with seq
as( select 13 number
union all
select s.number
+ case when s.number %2 = 1 then 2
when s.number %3 = 2 then 2
when s.number %5 = 4 then 2
when s.number %7 = 6 then 2
when s.number %11 = 10 then 2
else 1 end
from seq s
where number < 32767
)
, prime as (
select s.number
from seq s
where not exists ( select 1 from seq s2 where s2.number < s.number and (s.number) % s2.number = 0)
)
select *
from prime
option (MAXRECURSION 32767)