将多个参数从单个表传递给函数的优化方法是什么?

Gou*_*pal 7 sql-server sql-server-2016

我有一个[dbo].[FN_CalcAerialDistance]接受4 parameters并返回其结果的函数。现在 4 个参数来自same table,我不想多次点击数据库来带来相同的数据。我试过了:

SELECT [dbo].[FN_CalcAerialDistance]
    (
       (select latitude from loc.locations where place_name = 'Delhi'),
       (select longitude from loc.locations where place_name = 'Delhi'),
       (select latitude from loc.locations where place_name = 'Mumbai'),
       (select longitude from loc.locations where place_name = 'Mumbai')
    )
Run Code Online (Sandbox Code Playgroud)

有什么方法可以优化代码?我也尝试像数组一样访问表数据类型

Len*_*art 13

作为 Edgars 答案的补充,您无需声明任何变量即可:

SELECT dbo.fn_calcaerialdistance (x.latitude
                                 ,x.longitude
                                 ,y.latitude
                                 ,y.longitude)
FROM loc.locations as x
CROSS JOIN loc.locations y
WHERE x.place_name = 'Delhi'
  AND y.place_name = 'Mumbai' ;
Run Code Online (Sandbox Code Playgroud)

不过,我不希望它表现得更好。

此外,您可以一次计算多个距离

SELECT x.place_name
     , y.place_name
     , dbo.fn_calcaerialdistance (x.latitude
                                 ,x.longitude
                                 ,y.latitude
                                 ,y.longitude)
FROM loc.locations as x
CROSS JOIN loc.locations y
WHERE x.place_name in ('Delhi', 'Bangalore') 
  AND y.place_name = 'Mumbai' ;
Run Code Online (Sandbox Code Playgroud)


Edg*_*ron 10

这是我唯一能想到的。你可以试试这个作为基础:

DECLARE
    @p1 DECIMAL(12, 9),
    @p2 DECIMAL(12, 9),
    @p3 DECIMAL(12, 9),
    @p4 DECIMAL(12, 9) ;

SELECT @p1 = latitude, @p2 = longitude 
FROM loc.locations 
WHERE place_name = 'Delhi';

SELECT @p3 = latitude, @p4 = longitude 
FROM loc.locations 
WHERE place_name = 'Mumbai';

SELECT dbo.fn_calcaerialdistance (@p1, @p2, @p3, @p4) ;
Run Code Online (Sandbox Code Playgroud)