首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

存储过程 改为sql2000能用的 2000不支持row_number over

2013-07-16 
存储过程 改成sql2000能用的 2000不支持row_number over create proc my_FilteringRecords @time int,@res

存储过程 改成sql2000能用的 2000不支持row_number over

 create proc my_FilteringRecords @time int,@result int output
  as
 BEGIN
SET NOCOUNT ON;
select *,row_number() over (partition by sn order by arDate) re 
into #cu3
from AttendanceRecord where states=0

select a.*
into #cu2
from #cu3 a
inner join #cu3 b on a.sn=b.sn and a.re-b.re=1
where datediff(second,b.arDate,a.arDate)/60>=@time

declare @err int

begin Tran
insert SaveRecord (id,SN,Name,arDate)
select id,SN,Name,arDate from #cu2
union all
select id,SN,Name,arDate from #cu3 
where re=1 and sn in (select distinct sn from #cu2)
order by SN,arDate
set @err=@@error
if @err>0
goto label_end

update  AttendanceRecord set states=1 where sn in (select distinct sn from #cu3)
set @err=@@error

label_end:

if @err>0
begin 
set @result=0
rollback Tran
end
else
begin 
set @result=1
commit Tran
end
end
    
  go
  
存储 SQL
[解决办法]
我正在改前台函数为后台存储过程,回头我帮你改。
[解决办法]


sql2000没有row_number(),把这个代码
select *,row_number() over (partition by sn order by arDate) re 
into #cu3
from AttendanceRecord where states=0

改为

create table #cu3(id int,sn varchar(10), .......,row_num int)
insert into #cu3(sn ..)
select .....
from AttendanceRecord 
where states=0
order by sn

declare @i int,@sn varchar(20)
set @i=0
update #cu3
set @i=case when sn=@sn then @i+1 else 1 end,row_num=@i



[解决办法]
try this,


create proc my_FilteringRecords 
(@time int,
 @result int output)
as
begin
 set nocount on
 
 select a.*,
        (select count(1) 
         from AttendanceRecord b
         where b.states=a.states and b.sn=a.sn and b.arDate<=a.arDate) 're'
  into #cu3
  from AttendanceRecord a
  where a.states=0
 
 select a.*
  into #cu2
  from #cu3 a
  inner join #cu3 b on a.sn=b.sn and a.re-b.re=1
  where datediff(second,b.arDate,a.arDate)/60>=@time
 
 declare @err int
 
 begin Tran
   insert SaveRecord (id,SN,Name,arDate)
    select id,SN,Name,arDate from #cu2
    union all
    select id,SN,Name,arDate from #cu3 
      where re=1 and sn in (select distinct sn from #cu2)
    order by SN,arDate

   set @err=@@error
   if @err>0
      goto label_end
 
   update AttendanceRecord set states=1 where sn in (select distinct sn from #cu3)

   set @err=@@error
   
label_end:

if @err>0
begin 
  set @result=0
  rollback Tran
end
else
begin 
  set @result=1
  commit Tran
end

end

热点排行