在表值函数中定义参数 - SQL Server

时间:2016-01-19 20:09:41

标签: sql-server stored-functions

我正在尝试将匹配的邮政编码作为表格返回,因此我可以将其与'Where zipCode IN(...)声明一起使用。

angular.module('ngToggle', [])
.controller('AppCtrl',['$scope', function($scope){
    $scope.custom = true;
    $scope.toggleCustom = function() {
        $scope.custom = $scope.custom === false ? true: false;
    };
}]);

如果不可能,会有什么选择?

2 个答案:

答案 0 :(得分:2)

以下是如何将其转换为内联表值函数的方法。性能优势可能让您感到惊讶。

create function dbo.zipSearch(@zip varchar(12), @mile int)returns table as return
    Select ZIP 
    From zipcode 
    cross apply
    (
        select latitude
            , longitude 
        from ZipCode 
        where Zip = @zip
    ) LatLong 
    Where latitude >= LatLong.latitude - (@mile * 0.00569) 
        and latitude <= LatLong.latitude + (@mile * 0.00569) 
        and longitude >= LatLong.longitude - (@mile * 0.01629) 
        and longitude <= LatLong.longitude + (@mile * 0.01629);

以下是一些关于差异的文章。

Multi-statement Table Valued Function vs Inline Table Valued Function

http://www.sqlservercentral.com/blogs/discussionofsqlserver/2012/02/15/comparing-inline-and-multistatement-table-valued-functions/

http://sqlmag.com/t-sql/inline-vs-multistatement-table-valued-udfs

答案 1 :(得分:0)

发布该功能的最终版本,以防其他人像我一样撞到同一面墙。感谢@Tab Alleman提示。这是一个语法问题。

create function dbo.zipSearch(@zip varchar(12), @mile int)
  returns @tmp TABLE (zipCode varchar(12))
  as
  begin
    declare @ns float = @mile * 0.00569;
    declare @ew float = @mile * 0.01629;

    declare @ltt float, @lng float;
    Select @ltt = latitude, @lng = longitude From ZipCode Where ZIP = @zip;

    INSERT @tmp
        Select ZIP From zipcode Where latitude >= @ltt - @ns and latitude <= @ltt + @ns and longitude >= @lng - @ew and longitude <= @lng + @ew;

    return
  end