Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# zipcode和radius的参数化sql查询不起作用_C#_Sql - Fatal编程技术网

C# zipcode和radius的参数化sql查询不起作用

C# zipcode和radius的参数化sql查询不起作用,c#,sql,C#,Sql,我有一张桌子 具有zipcode列的人员 这与zipcodes表有关,该表以zipcode作为id,并有一列表示纬度和经度 我发现了一系列函数,它们使用纬度和经度计算球体上的距离(基本上是zipcodes)。我对sql相当陌生,想知道如何在存储过程中使用这些函数 纬度函数: ALTER Function [dbo].[LatitudePlusDistance](@StartLatitude Float, @Distance Float) Returns Float As Begi

我有一张桌子

具有zipcode列的人员

这与zipcodes表有关,该表以zipcode作为id,并有一列表示纬度和经度

我发现了一系列函数,它们使用纬度和经度计算球体上的距离(基本上是zipcodes)。我对sql相当陌生,想知道如何在存储过程中使用这些函数

纬度函数:

        ALTER Function [dbo].[LatitudePlusDistance](@StartLatitude Float, @Distance Float) Returns Float
As
Begin
    Return (Select @StartLatitude + Sqrt(@Distance * @Distance / 4766.8999155991))
End
    ALTER FUNCTION [dbo].[LongitudePlusDistance]
(
    @StartLongitude float,
    @StartLatitude float,
    @Distance float
)
    RETURNS Float
    AS
begin

RETURN (select @startLongitude + sqrt(@Distance * @Distance/(4784.39411916406*Cos(2*@StartLatitude/114.591559026165)*Cos(2*@StartLatitude/114.591559026165))))
END
begin

RETURN (select @startLongitude + sqrt(@Distance * @Distance/(4784.39411916406*Cos(2*@StartLatitude/114.591559026165)*Cos(2*@StartLatitude/114.591559026165))))
END`
经度函数:

        ALTER Function [dbo].[LatitudePlusDistance](@StartLatitude Float, @Distance Float) Returns Float
As
Begin
    Return (Select @StartLatitude + Sqrt(@Distance * @Distance / 4766.8999155991))
End
    ALTER FUNCTION [dbo].[LongitudePlusDistance]
(
    @StartLongitude float,
    @StartLatitude float,
    @Distance float
)
    RETURNS Float
    AS
begin

RETURN (select @startLongitude + sqrt(@Distance * @Distance/(4784.39411916406*Cos(2*@StartLatitude/114.591559026165)*Cos(2*@StartLatitude/114.591559026165))))
END
begin

RETURN (select @startLongitude + sqrt(@Distance * @Distance/(4784.39411916406*Cos(2*@StartLatitude/114.591559026165)*Cos(2*@StartLatitude/114.591559026165))))
END`
计算距离函数

    `ALTER Function [dbo].[CalculateDistance]
    (@Longitude1 Decimal(8,5),
    @Latitude1   Decimal(8,5),
    @Longitude2  Decimal(8,5),
    @Latitude2   Decimal(8,5))
Returns Float
As
Begin
Declare @Temp Float

Set @Temp = sin(@Latitude1/57.2957795130823) * sin(@Latitude2/57.2957795130823) + cos(@Latitude1/57.2957795130823) * cos(@Latitude2/57.2957795130823) * cos(@Longitude2/57.2957795130823 - @Longitude1/57.2957795130823)

if @Temp > 1
    Set @Temp = 1
Else If @Temp < -1
    Set @Temp = -1

Return (3958.75586574 * acos(@Temp) )

End`
`ALTER函数[dbo].[CalculatedInstance]
(@Longitude1十进制(8,5),
@纬度1十进制(8,5),
@纵向2十进制(8,5),
@纬度2十进制(8,5))
返回浮动
作为
开始
声明@Temp Float
设置温度=sin(@Latitude1/57.2957795130823)*sin(@Latitude2/57.2957795130823)+cos(@Latitude1/57.2957795130823)*cos(@Latitude2/57.2957795130823)*cos(@Longitude2/57.2957795130823-@Longitude1/57.2957795130823)
如果@Temp>1
设置温度=1
否则,如果@Temp<-1
设置@Temp=-1
返回(3958.75586574*acos(温度))
结束`
我试过这样的东西

    Declare @Longitude Decimal(8,5)
Declare @Latitude Decimal(8,5)

Select  @Longitude = Longitude,
        @Latitude = Latitude
From    ZipCodes
Where   ZipCode = '20013'

    Declare @Distance int

Select  persons.personName, ZipCodes.City,  dbo.CalculateDistance(@Longitude, @Latitude, ZipCodes.Longitude, ZipCodes.Latitude) As Distance
From    persons
        Inner Join ZipCodes
            On persons.zipcode = ZipCodes.ZipCode
Order By dbo.CalculateDistance(@Longitude, @Latitude, ZipCodes.Longitude, ZipCodes.Latitude)
    WHERE dbo.CalculateDistance(@Longitude, @Latitude, ZipCodes.Longitude, ZipCodes.Latitude) As Distance <= @Distance
Declare@Longitude Decimal(8,5)
声明纬度十进制数(8,5)
选择@经度=经度,
@纬度=纬度
从ZipCodes
其中ZipCode='20013'
声明@Distance int
选择persons.personName、ZipCodes.City、dbo.calculatedInstance(@Longitude、@Latitude、ZipCodes.Longitude、ZipCodes.Latitude)作为距离
来自个人
内连接ZipCodes
关于persons.zipcode=ZipCodes.zipcode
按dbo.CalculatedInstance(@经度,@纬度,ZipCodes.经度,ZipCodes.Latitude)排序
其中dbo.calculateInstance(@Longitude,@Latitude,ZipCodes.Longitude,ZipCodes.Latitude)作为距离您在“WHERE”之前使用了“order by”子句,这是问题之一,在WHERE条件是另一个问题的情况下,您不能使用别名。请尝试以下查询:

Declare @Longitude Decimal(8,5)
Declare @Latitude Decimal(8,5)

Select  @Longitude = Longitude,
        @Latitude = Latitude
From    ZipCodes
Where   ZipCode = '20013'

Declare @Distance int
set @Distance = 5

Select  persons.personName, ZipCodes.City,  dbo.CalculateDistance(@Longitude, @Latitude,    ZipCodes.Longitude, ZipCodes.Latitude) As Distance
From    persons Inner Join ZipCodes On persons.zipcode = ZipCodes.ZipCode
WHERE dbo.CalculateDistance(@Longitude, @Latitude, ZipCodes.Longitude, ZipCodes.Latitude) <= @Distance
Order By dbo.CalculateDistance(@Longitude, @Latitude, ZipCodes.Longitude, ZipCodes.Latitude)
Declare@Longitude Decimal(8,5)
声明纬度十进制数(8,5)
选择@经度=经度,
@纬度=纬度
从ZipCodes
其中ZipCode='20013'
声明@Distance int
设置@Distance=5
选择persons.personName、ZipCodes.City、dbo.calculatedInstance(@Longitude、@Latitude、ZipCodes.Longitude、ZipCodes.Latitude)作为距离
从persons内部连接persons.zipcode=ZipCodes.zipcode上的ZipCodes
WHERE dbo.calculateInstance(@Longitude,@Latitude,ZipCodes.Longitude,ZipCodes.Latitude)您在“WHERE”之前使用的是“order by”子句,这是一个问题,在WHERE条件是另一个问题的情况下,您不能使用别名。请尝试以下查询:

Declare @Longitude Decimal(8,5)
Declare @Latitude Decimal(8,5)

Select  @Longitude = Longitude,
        @Latitude = Latitude
From    ZipCodes
Where   ZipCode = '20013'

Declare @Distance int
set @Distance = 5

Select  persons.personName, ZipCodes.City,  dbo.CalculateDistance(@Longitude, @Latitude,    ZipCodes.Longitude, ZipCodes.Latitude) As Distance
From    persons Inner Join ZipCodes On persons.zipcode = ZipCodes.ZipCode
WHERE dbo.CalculateDistance(@Longitude, @Latitude, ZipCodes.Longitude, ZipCodes.Latitude) <= @Distance
Order By dbo.CalculateDistance(@Longitude, @Latitude, ZipCodes.Longitude, ZipCodes.Latitude)
Declare@Longitude Decimal(8,5)
声明纬度十进制数(8,5)
选择@经度=经度,
@纬度=纬度
从ZipCodes
其中ZipCode='20013'
声明@Distance int
设置@Distance=5
选择persons.personName、ZipCodes.City、dbo.calculatedInstance(@Longitude、@Latitude、ZipCodes.Longitude、ZipCodes.Latitude)作为距离
从persons内部连接persons.zipcode=ZipCodes.zipcode上的ZipCodes

其中dbo.calculateInstance(@Longitude,@Latitude,ZipCodes.Longitude,ZipCodes.Latitude)尝试了它。我把订单全部按条款拿了出来。似乎不起作用。也没有要求我输入@distance。只是编辑了查询。增加了距离=5时的设置。从那里你可以设置你的距离。仍然不起作用:(我应该说(希望这有助于诊断问题)我正在使用vb web developer,我只是在“新查询”中尝试这一切向导。这会有区别吗?没有错误,只是没有要求我输入距离,也没有返回任何行。我将order by子句全部取出。似乎不起作用。也没有要求我输入@distance。只是编辑了查询。添加了set@distance=5。从那里可以设置距离。仍然不起作用:(我应该说(希望这有助于诊断问题)我正在使用vb web developer,我只是在“新建查询”向导中尝试这一切。这会有区别吗?没有错误,它只是不要求我输入距离,也不返回任何行