Pat*_*tec 0 sql sql-server sql-server-2008
我需要WHERESQL Server中的条件子句的解决方案.我无法弄清楚如何WHERE根据声明的变量将函数添加到子句中.我将条件部分与所需的逻辑括起来
DECLARE @distance bigint
DECLARE @photosneeded bigint
SET @distance * 50
SELECT * FROM users u
WHERE
[IF @distance > 0 THEN distance_function(lat1,lon1,lat2,lon2)<=@distance END]
AND
[IF @photosneeded>0 THEN u.photo IS NOT NULL AND u.photo <>'' END]
Run Code Online (Sandbox Code Playgroud)
它可以使用普通的WHERE子句来完成:
SELECT * FROM users u
WHERE
(@distance <= 0 or (distance_function(lat1,lon1,lat2,lon2)<=@distance))
AND
(@photosneeded <= 0 or (u.photo IS NOT NULL AND u.photo <>''))
Run Code Online (Sandbox Code Playgroud)
但是,在子句中需要注意这种情况,因为它确实会搞砸执行计划优化.有关原因的更多信息,请参阅@ Iain的答案.