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

kgdipbyve444 2011-12-14 10:39:37
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);



...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kgdipbyve444 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 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……
[/Quote]

这个是不是每输出一条数据的时候他就会把下面的式子运行 一次?
(这两表的数据比较多)
kgdipbyve444 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ssp2009 的回复:]
把数据库取到客户端去计算吧,数据库计算效率不高
[/Quote]
上头要这样算。。没办法。
-晴天 2011-12-14
  • 打赏
  • 举报
回复
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
kgdipbyve444 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fredrickhu 的回复:]
晕 这个不用程序来计算吗?不一定所有的业务逻辑都要用数据库解决吧
[/Quote]
上头要这样弄没办法。。
快溜 2011-12-14
  • 打赏
  • 举报
回复
把数据库取到客户端去计算吧,数据库计算效率不高
--小F-- 2011-12-14
  • 打赏
  • 举报
回复
晕 这个不用程序来计算吗?不一定所有的业务逻辑都要用数据库解决吧
-晴天 2011-12-14
  • 打赏
  • 举报
回复
传到客户端去做运算效率更高.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧