带可空参数的SQL WHERE

时间:2019-03-05 03:09:38

标签: sql sql-server

我有一个SQL查询,需要根据以下可能性返回行:

ReqType
------
NULL
LTL
TL

要更好地了解我要实现的目标:

SELECT * FROM MyTable MT
WHERE MT.ReqType = @param1

要传递的参数为@ param。 @param的可能性可以为NULL,TL或LTL。

@ {paramReqTypenvarchar(3)

3 个答案:

答案 0 :(得分:2)

NULL=不兼容,因此您需要更明确的逻辑:

WHERE (MT.ReqType = @param1 OR
       (MT.ReqType IS NULL AND @param1 IS NULL)
      )

答案 1 :(得分:2)

如果@param1(可以是)SQL NULL,那么您也可以这样做:

SELECT * FROM MyTable MT
WHERE isnull(MT.ReqType, '')  =  isnull(@param1,'') 

*如果您为MT.ReqType允许使用空字符串,则无法使用。在这种情况下,您可以选择另一个char来替换空值。

答案 2 :(得分:1)

与Gordon的作品相同,但更为紧凑,请注意合并的使用。我认为这不是索引友好的,所以您可能要小心使用它。

declare @test table 
( 
    ReqFld1 varchar(4),
    ReqType varchar(3)
)

insert into @test values ('FLD1', 'LTL')
insert into @test values ('FLD2', 'TL')
insert into @test values ('FLD3', NULL)

declare @srch varchar(3)

select @srch = null
select * from   @test 
where  coalesce(ReqType, '') = (coalesce(@srch, ''))

select @srch = 'LTL'
select * from   @test 
where  coalesce(ReqType, '') = (coalesce(@srch, ''))

select @srch = 'TL'
select * from   @test 
where  coalesce(ReqType, '') = (coalesce(@srch, ''))