我有一个SQL查询,需要根据以下可能性返回行:
ReqType
------
NULL
LTL
TL
要更好地了解我要实现的目标:
SELECT * FROM MyTable MT
WHERE MT.ReqType = @param1
要传递的参数为@ param
。 @param的可能性可以为NULL,TL或LTL。
@ {param
和ReqType
是nvarchar(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, ''))