如何根据运行时传递的参数编写SQL Server 2008查询

时间:2011-06-23 18:22:46

标签: tsql sql-server-2008

我有4个参数传递给查询。我的要求是返回结果,即使它们中的任何一个为空。我们是否必须在where子句中编写if条件或编写动态查询?该参数的datetime是其中之一,datetime是范围变量。

提前致谢。

2 个答案:

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