如何使用WHERE/AND子句中的参数在TSQL中编写条件选择查询?

如何使用WHERE/AND子句中的参数在TSQL中编写条件选择查询?,tsql,stored-procedures,select,conditional,Tsql,Stored Procedures,Select,Conditional,我有一个存储过程,它返回指定半径内的邮政编码。争论是 ALTER PROCEDURE [dbo].[proximitySearch] @proximity int = 0, @country varchar (2) = NULL, @city varchar (180) = NULL, @state varchar (100) = NULL, @stateAbr varchar (2) = NULL, @postalCode varchar(20

我有一个存储过程,它返回指定半径内的邮政编码。争论是

ALTER PROCEDURE [dbo].[proximitySearch] 
    @proximity int = 0,
    @country varchar (2) = NULL,
    @city varchar (180) = NULL,
    @state varchar (100) = NULL,
    @stateAbr varchar (2) = NULL,
    @postalCode varchar(20) = NULL
AS...
在proc中,第一个查询需要选择一条与传入内容匹配的记录(或无记录),并将lat/long分配给局部变量,正如我在下面开始写的:

SELECT TOP 1 @Longitude = Longitude, @Latitude = Latitude
FROM   PostalCodes
WHERE  ...
这就是我被难倒的地方。。。WHERE子句需要根据传入的内容设置条件。某些参数(或所有参数)可以为NULL,如果为NULL,我不希望在查询中使用它们

我的思路是:

SELECT TOP 1 @Longitude = Longitude, @Latitude = Latitude
FROM   PostalCodes
WHERE Longitude IS NOT NULL
AND CASE WHEN @postalCode IS NOT NULL THEN PostalCode = @postalCode ELSE 1 END
…但这不起作用。这样的事情通常是怎么做的?(我绝对不是一个经验丰富的TSQL人!!!)提前谢谢

SELECT TOP 1 @Longitude = Longitude, @Latitude = Latitude
FROM   PostalCodes
WHERE 
      ((@postalCode IS NULL) OR (PostalCode = @postalCode))
  AND ((@someotherparam IS NULL) OR (someothercolumn = @someotherparam))  etc...

但是请注意,这种技术可能会受到“参数嗅探”的影响。

实现这种逻辑的方法不止一种:

(一)

(二)

SELECT TOP 1 @Longitude = Longitude, @Latitude = Latitude
FROM   PostalCodes
WHERE Longitude IS NOT NULL
AND (@postalCode IS NULL OR PostalCode = @postalCode)
SELECT TOP 1 @Longitude = Longitude, @Latitude = Latitude
FROM   PostalCodes
WHERE Longitude IS NOT NULL
AND PostalCode = COALESCE(@postalCode, PostalCode)