我执行时有以下存储过程代码,给出了一个错误,指出无效的列名Lat,Lng。这些Lat和Lng变量是从c#代码后面调用的参数,在此特定段落中最后指出sql查询。
CREATE FUNCTION spherical_distance(@a float, @b float, @c float)
RETURNS float
AS
BEGIN
RETURN ( 6371 * ACOS( COS( (@a/@b) ) * COS( (Lat/@b) ) * COS( ( Lng/@b ) - (@c/@b) ) + SIN( @a/@b ) * SIN( Lat/@b ) ) )
END
create view [dbo].[business] as
SELECT Id,
Name1,
ZipCode,
StreetName,
StreetNumber,
State1,
Lat,
Lng,
Keyword
FROM Business_Details
sqlda.SelectCommand.CommandText = "select *, spherical_distance( Lat, 57.2958, Lng) as distance
from business
where (( distance < '" + radius + "' )
and (StreetName like '%" + streetname + "%')
and (Keyword like '%" + keyword1 + "%' ))
order by spherical_distance(Lat,57.2958,Lng)";
答案 0 :(得分:1)
如何将@符号放在这些参数前面?
答案 1 :(得分:1)
创建spherical_distance
函数时,它对Lat
和Lng
表达式一无所知。这些是函数的两个附加参数,例如@a
,@b
和@c
吗? (该功能对视图一无所知。)
稍后当您调用该函数时,您将值从colum Lat
传递到@a
,并从Lng
传递到@c
,因此在函数中这两个参数将包含这些列中的值。