0

次のクエリを実行しています。

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 から次のエラーが返されます。「ゼロ除算エラーが発生しました。」不思議なことに、最初の 2 行だけを (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
4

6 に答える 6

1

この問題は、@p2X = @p1X の場合に発生します。その場合、どうなると思いますか?

于 2008-12-17T17:45:49.753 に答える