在sql server中创建存储过程和视图的问题

时间:2010-09-01 05:17:58

标签: c# sql sql-server-2005

我执行时有以下存储过程代码,给出了一个错误,指出无效的列名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)";

2 个答案:

答案 0 :(得分:1)

如何将@符号放在这些参数前面?

答案 1 :(得分:1)

创建spherical_distance函数时,它对LatLng表达式一无所知。这些是函数的两个附加参数,例如@a@b@c吗? (该功能对视图一无所知。)

稍后当您调用该函数时,您将值从colum Lat传递到@a,并从Lng传递到@c,因此在函数中这两个参数将包含这些列中的值。