【发布时间】:2008-12-17 17:42:00
【问题描述】:
我正在执行以下查询:
Select guiPolygonID, dbo.fn_Yval(p1X, p1Y, p2X, p2Y, 4.003318)
From [vPolygonSegments]
Where dbo.fn_Yval(p1X, p1Y, p2X, p2Y, 4.003318) > 0
函数fn_Yval的重要部分(所有参数都是float类型):
set @m = (@p2Y - @p1Y)/(@p2X - @p1X)
set @b = @p1Y - (@m*@p1X)
set @result = (@m*@xval+@b)
视图 vPolygonSegments 不包含 p1X = p2X 的记录(不包括这些记录)。然而,当我执行查询时,SQL Server 返回错误:“遇到除以零错误”。奇怪的是,如果我只执行前两行(没有 where 子句),查询返回结果就好了。
我该如何解决这个问题,和/或导致这种行为的原因是什么?
编辑: 这是我的看法:
Select P1.guiPolygonID,
P1.decX as p1X, P1.decY as p1Y,
P2.decX as p2X, P2.decY as p2Y
From PolygonPoints P1, PolygonPoints P2
Where P1.guiPolygonID = P2.guiPolygonID
and (
P1.lPointNumber - P2.lPointNumber = 1
or (
-- Some other unimportant code
)
)
and P1.decX <> P2.decX
【问题讨论】:
-
如果您使用此功能确定线段的角度,并且您的点在纬度/经度坐标系中,那么您会遇到更大的问题。问题是纬度变化一度与经度变化度不同。