+ -
当前位置:首页 → 问答吧 → 如何在存储过程中进行计算

如何在存储过程中进行计算

时间:2011-12-14

来源:互联网

createproceduretests
as

selecta.road_id,a.termid,a.User_ID,b.longitude,b.latitudefrom SYSTEM_DATA_ROAD a,SYSTEM_DATA_ROAD_INFO bwherea.begin_date<'2011-12-13'anda.begin_date>'2011-12-12'anda.road_id=b.road_idandb.timeat>'2011-12-12'andb.timeat<'2011-12-13'


select m.region_id,m.corp_id,m.corp_cnname,m.corp_address,n.longitude,n.latitudefromsystem_data_corp m,system_data_corp_reg nwherem.corp_id=n.corp_idand(n.longitude<>'0'orn.latitude<>'0')




go
上面的是存储过程
我想把得到的 b.longitude,b.latitude 跟 n.longitude,n.latitude 带到一个计算公式里进行计算。 不知道怎么写。请人指点。
下面就是个计算公式。

程序代码:

  doubley1=b.longitude  
  doubley2=b.latitude
  doublex1=n.longitude  
  doublex2=n.latitude
  doubleEa=6378137
  doubleEb=6356725
  Long=y1  
  Lat= x1
  Long2=y2  
  Lat2= x2
  LongRad=Long* 3.1415926/180;
  LatRad=Lat* 3.1415926 /180;
  Ec=Eb+(Ea-Eb)*(90-Lat)/90;
  Ed=Ec*Math.Cos(LatRad);

  LongRad2=Long2*3.1415926/180;
  LatRad2=Lat2*3.1415926 /180;
  Ec2=Eb+(Ea-Eb)*(90-Lat)/90;
  Ed2=Ec*Math.Cos(LatRad2);




  doubledx=(LongRad2-LongRad)*Ed;
  doubledy=(LatRad2-LatRad)*Ec;
  doubled=Sqrt(dx*dx+dy*dy);
   
   

作者: kgdipbyve444   发布时间: 2011-12-14

传到客户端去做运算效率更高.

作者: qianjin036a   发布时间: 2011-12-14

晕 这个不用程序来计算吗?不一定所有的业务逻辑都要用数据库解决吧

作者: fredrickhu   发布时间: 2011-12-14

把数据库取到客户端去计算吧,数据库计算效率不高

作者: ssp2009   发布时间: 2011-12-14

引用 2 楼 fredrickhu 的回复:
晕 这个不用程序来计算吗?不一定所有的业务逻辑都要用数据库解决吧

上头要这样弄没办法。。

作者: kgdipbyve444   发布时间: 2011-12-14

SQL code
create procedure tests
as
begin
declare @y1 float,@y2 float,@x1 float,@x2 float,@Ea float,@Eb float,@Ec float,@Ec2 float
declare @Long float,@Lat float,@Long2 float,@Lat2 float,@LongRad float,@LatRad float
declare @LongRad2 float,@LatRad2 float,@dx float,@dy float,@ed float,@Ed2 float

select @y1=b.longitude,@y2=b.latitude 
from SYSTEM_DATA_ROAD a,SYSTEM_DATA_ROAD_INFO b 
where a.begin_date<'2011-12-13' and a.begin_date>'2011-12-12' and a.road_id=b.road_id and b.timeat>'2011-12-12' and b.timeat<'2011-12-13'
select @x1=n.longitude,@x2=n.latitude
from system_data_corp m,system_data_corp_reg n
where m.corp_id=n.corp_id and (n.longitude<>'0' or n.latitude<>'0')
set @Ea=6378137
set @Eb=6356725
set @Long=@y1   
set @Lat= @x1
set @Long2=@y2   
set @Lat2= @x2
set @LongRad=@Long* 3.1415926/180;
set @LatRad=@Lat* 3.1415926 /180;
set @Ec=@Eb+(@Ea-@Eb)*(90-@Lat)/90;
set @Ed=@Ec*Cos(@LatRad);

set @LongRad2=@Long2*3.1415926/180;
set @LatRad2=@Lat2*3.1415926 /180;
set @Ec2=@Eb+(@Ea-@Eb)*(90-@Lat)/90;
set @Ed2=@Ec*Cos(@LatRad2);

set @dx=(@LongRad2-@LongRad)*@Ed;
set @dy=(@LatRad2-@LatRad)*@Ec;
set @ed=Sqrt(@dx*@dx+@dy*@dy);


select @dx,@dy,@ed
end
go

作者: qianjin036a   发布时间: 2011-12-14

引用 3 楼 ssp2009 的回复:
把数据库取到客户端去计算吧,数据库计算效率不高

上头要这样算。。没办法。

作者: kgdipbyve444   发布时间: 2011-12-14

引用 5 楼 qianjin036a 的回复:
SQL code

create procedure tests
as
begin
declare @y1 float,@y2 float,@x1 float,@x2 float,@Ea float,@Eb float,@Ec float,@Ec2 float
declare @Long float,@Lat float,@Long2 float,@Lat2 float,@LongRa……


这个是不是每输出一条数据的时候他就会把下面的式子运行 一次?
(这两表的数据比较多)

作者: kgdipbyve444   发布时间: 2011-12-14

热门下载

更多