我有4个参数传递给查询。我的要求是返回结果,即使它们中的任何一个为空。我们是否必须在where子句中编写if条件或编写动态查询?该参数的datetime
是其中之一,datetime
是范围变量。
提前致谢。
答案 0 :(得分:1)
如果我理解正确,你需要准备一个处理NULL参数值的where子句。
所以,这可能是一个解决方案:
declare @myDate datetime = NULL;
declare @myRangeFrom datetime = NULL;
declare @myRangeUntil datetime = NULL;
SELECT * FROM MyTable
WHERE (@myDate IS NULL OR tblDate = @myDate)
AND (@myRangeFrom IS NULL OR tbl2ndDate >= @myRangeFrom)
AND (@myRangeUntil IS NULL OR tbl2ndDate <= @myRangeUntil)
答案 1 :(得分:0)
我认为您要求的是“SQL可选参数”:
CREATE PROCEDURE TestProc
(
@Param1 varchar(50) = NULL,
@Param2 varchar(50) = NULL,
@Param3 varchar(50) = NULL
)
AS
SELECT
*
FROM
TestTable
WHERE
((@Param1 IS NULL) OR (col1 = @Param1)) AND
((@Param2 IS NULL) OR (col2 = @Param2)) AND
((@Param3 IS NULL) OR (col3 = @Param3))
但是此查询存在性能问题;它看起来很优雅,它会阻止SQL Server正确使用你的索引。如果性能有问题,最好使用sp_executesql动态创建字符串并将其作为查询执行。
请参阅:http://www.davewentzel.com/content/optional-sql-parameters-and-performance