我在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
答案 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