我想要的是@AddressCode
为空时然后执行
SELECT
*
FROM
Addresses
WHERE
1= 1
如果@AddressCode不为NULL,则执行
SELECT
*
FROM
Addresses
WHERE
1= 1 AND @AddressCode=Addresses.AddressCode
我如何实现这一点...我尝试了下面的查询,它不适用于具有NULL
值的地址或@AddressCode is NULL
....(地址只是一个虚构的表名)
Declare @AddressCode varchar(20)
Set @AddressCode=NULL
SELECT
*
FROM
Addresses
WHERE
1= 1
AND
CASE @AddressCode
WHEN NULL
THEN Addresses.AddressCode
ELSE @AddressCode
END =Addresses.AddressCode
我努力但却无法成功...我知道我可以编写IF语句并编写单独的select语句但不想这样做因为我有很多这样的标准@AddressCode
: (
答案 0 :(得分:11)
SELECT *
FROM
Addresses
WHERE
(@AddressCode IS NULL OR Addresses.AddressCode = @AddressCode)
答案 1 :(得分:4)
在这种情况下,您使用的CASE
不正确(与null相比)。正确的方法是
CASE
WHEN @AddressCode IS NULL THEN Addresses.AddressCode
ELSE @AddressCode
END
您的查询存在的问题是CASE a WHEN b THEN c...
测试a=b
是否变为FALSE
(NULL
),如果其中一个操作数为空。
另一个问题是,如果你真的需要CASE
这里......