读书人

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

发布时间: 2013-07-16 22:38:05 作者: rapoo

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

读书人网 >SQL Server

热点推荐