带有可为空参数的SQL WHERE
我有一个SQL查询,需要根据以下可能性返回行:带有可为空参数的SQL WHERE,sql,sql-server,Sql,Sql Server,我有一个SQL查询,需要根据以下可能性返回行: ReqType ------ NULL LTL TL 为了更好地了解我想要实现的目标: SELECT * FROM MyTable MT WHERE MT.ReqType = @param1 正在传递的参数是@param。@param的可能性可以是NULL、TL或LTL @param和ReqType是nvarchar3NULL不能与=,因此需要更明确的逻辑: WHERE (MT.ReqType = @param1 OR (MT.R
ReqType
------
NULL
LTL
TL
为了更好地了解我想要实现的目标:
SELECT * FROM MyTable MT
WHERE MT.ReqType = @param1
正在传递的参数是@param。@param的可能性可以是NULL、TL或LTL
@param和ReqType是nvarchar3NULL不能与=,因此需要更明确的逻辑:
WHERE (MT.ReqType = @param1 OR
(MT.ReqType IS NULL AND @param1 IS NULL)
)
NULL不适用于=,因此需要更明确的逻辑:
WHERE (MT.ReqType = @param1 OR
(MT.ReqType IS NULL AND @param1 IS NULL)
)
工作原理与Gordon的相同,更紧凑一些,注意coalesce的使用。我不认为这是索引友好的,所以您可能需要小心使用它
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, ''))
工作原理与Gordon的相同,更紧凑一些,注意coalesce的使用。我不认为这是索引友好的,所以您可能需要小心使用它
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, ''))
如果@param1可以是SQL NULL,那么您还可以执行以下操作:
SELECT * FROM MyTable MT
WHERE isnull(MT.ReqType, '') = isnull(@param1,'')
*如果您允许MT.ReqType为空字符串,那么这将不起作用。在这种情况下,您可以选择另一个字符来替换null值。如果@param1可以是SQL null,那么您还可以执行以下操作:
SELECT * FROM MyTable MT
WHERE isnull(MT.ReqType, '') = isnull(@param1,'')
*如果您允许MT.ReqType为空字符串,那么这将不起作用。在这种情况下,您可以选择另一个字符来替换null值。MT.ReqType=@param1或MT.ReqType为null,@param1为null当您说@param1可以为null时,您是指SQL null类型吗?@DaniDev Yes I doMT.ReqType=@param1或MT.ReqType为null,@param1为null当您说@param1可以为null时,您是指SQL null类型吗?@DaniDev Yes I多谢!这正是我想要的。谢谢你为我节省时间!哇,谢谢你!这正是我想要的。谢谢你为我节省时间!