Я выполняю следующий запрос:
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), запрос вернет результаты просто отлично.
Как мне это исправить и / или что вызывает такое поведение?
Edit:
Вот мой взгляд:
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