Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有可为空参数的SQL WHERE_Sql_Sql Server - Fatal编程技术网

带有可为空参数的SQL WHERE

带有可为空参数的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

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

ReqType
------
NULL
LTL
TL
为了更好地了解我想要实现的目标:

SELECT * FROM MyTable MT
WHERE MT.ReqType = @param1
正在传递的参数是@param。@param的可能性可以是NULL、TL或LTL

@param和ReqType是nvarchar3

NULL不能与=,因此需要更明确的逻辑:

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多谢!这正是我想要的。谢谢你为我节省时间!哇,谢谢你!这正是我想要的。谢谢你为我节省时间!