Where子句SQL Server中的“@Parameter = null”

时间:2017-03-01 00:51:39

标签: sql-server null where

我在tbl中有一个使用以下查询查询的记录。

    SELECT *
    FROM tbl
    WHERE Column1 = 'A'
    AND Column2 = 'B'
    AND Column3 IS NULL

我有一个SP,我有输入参数,我需要使用这些参数查询记录,下面是一个例子,我想返回上面的记录,但如果说@ Parameter3 ='C'也返回数据。什么是正确的语法? “AND(Column3 = @ PARMETER3或@ PARMETER3为空)是否返回多条记录?我只想要上面的单条记录。谢谢。

DECLARE @PARAMETER1 VARCHAR (150),
        @PARAMETER2 VARCHAR (150),
        @PARAMETER3 VARCHAR (150)

SELECT  @PARAMETER1 = 'A',
        @PARAMETER2 = 'B',
        @PARAMETER3 = NULL

SELECT *
    FROM tbl
    WHERE Column1 = @PARAMETER1
    AND Column2 = @PARAMETER2
    AND Column3 = @PARMETER3

3 个答案:

答案 0 :(得分:0)

SELECT *
    FROM tbl
    WHERE Column1 = @PARAMETER1
    AND Column2 = @PARAMETER2
    AND ISNULL(Column3, '') = ISNULL(@PARMETER3, '') --PARAMETER3?

如果''通常不是Column3的有效值,则应该有效。

答案 1 :(得分:0)

如果你在Column3中有索引并使用:

AND ISNULL(Column3, '') = ISNULL(@PARMETER3, '')

效率低下。你应该使用:

AND Column3 = ISNULL(@PARMETER3, Column3)

答案 2 :(得分:0)

使用红色查询:

  DECLARE @PARAMETER1 VARCHAR (150),
  @PARAMETER2 VARCHAR (150),
  @PARAMETER3 VARCHAR (150)
  SELECT  @PARAMETER1 = 'A',
  @PARAMETER2 = 'B',
  @PARAMETER3 = 'IS NULL'
  declare @sql VARCHAR(MAX)
  set @sql ='SELECT *    FROM tbl    WHERE Column1 = ' + @PARAMETER1+   
 'AND  Column2 = ' +  @PARAMETER2+    'AND Column3 ' +    @PARAMETER3 
  execute (@sql) -- to select query