我正在尝试编写一个SQL存储过程,该过程将确定某个点是否在缓冲区内。到目前为止,我已经能够对查询中的值进行硬编码,并且它们可以按预期工作,但是当我尝试用变量替换硬编码的值时,我会遇到问题。
这有效:
DECLARE @g geography;
Declare @Latitude float;
declare @Longitude float;
Set @g = geography::STPointFromText('POINT(' + CAST(@longitude as VARCHAR(16)) + ' ' + CAST(@latitude as VARCHAR(16)) + ')', 4326)
declare @bufloc geography = geography::Point(52.677777, -1.280786,
4326).STBuffer(1000)
SELECT CASE @g.STIntersects(@bufloc) WHEN 1 THEN '@g intersects @h'
ELSE '@g does not intersect @h'
END;
但是,如果我声明第二组坐标并尝试将变量传递到@bufloc中,则会中断查询。
Declare @BufLongitude float; Declare @DistanceInMeteres int;
declare @bufloc geography = geography::STPointFromText('POINT(' +
CAST(@BufLatitude as VARCHAR(16)) + ' ' + CAST(@BufLongitude as
VARCHAR(16)) + ')', 4326).STBuffer(1000)
我该怎么写才能使工作正常?最后,我想将两个坐标与距离参数一起传递给存储过程,以用于缓冲区的构造,如果该点可以位于结果缓冲区中,则返回true或false。
当硬编码查询返回相同值的@g相交@h时,该查询返回假值,并返回'@g不相交@h'。