【问题标题】:"@Parameter = null" in Where clause SQL ServerWhere 子句 SQL Server 中的“@Parameter = null”
【发布时间】:2017-07-20 04:02:19
【问题描述】:

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

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

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

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

【问题讨论】:

  • AND Column3 = ISNULL(@PARMETER3, Column3)

标签: sql-server null where


【解决方案1】:
SELECT *
    FROM tbl
    WHERE Column1 = @PARAMETER1
    AND Column2 = @PARAMETER2
    AND ISNULL(Column3, '') = ISNULL(@PARMETER3, '') --PARAMETER3?

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

【讨论】:

    【解决方案2】:

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

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

    这将是低效的。你应该使用:

    AND Column3 = ISNULL(@PARMETER3, Column3)
    

    【讨论】:

      【解决方案3】:

      使用红色查询:

        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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-23
        • 1970-01-01
        • 1970-01-01
        • 2021-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多