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)
| 归档时间: |
|
| 查看次数: |
1492 次 |
| 最近记录: |