我在TBL中有一个使用以下查询查询的记录。
SELECT *
FROM tbl
WHERE Column1 = 'A'
AND Column2 = 'B'
AND Column3 IS NULL
我有一个SP,其中我需要使用这些参数来查询记录,一个示例在此下面我想返回上面的记录,但如果Say @parameter3 ='c',也要返回数据。什么是正确的语法?是否"和(column3 = @parmeter3或 @parmeter3是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
SELECT *
FROM tbl
WHERE Column1 = @PARAMETER1
AND Column2 = @PARAMETER2
AND ISNULL(Column3, '') = ISNULL(@PARMETER3, '') --PARAMETER3?
如果''
通常不是Column3
的有效值。
如果您有,则在第3列中索引,并且使用:
AND ISNULL(Column3, '') = ISNULL(@PARMETER3, '')
它效率低下。您应该使用:
AND Column3 = ISNULL(@PARMETER3, Column3)
使用红色查询:
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