日期:2014-05-17  浏览次数:20399 次

存储过程 改成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