如何解决如何根据运行时传递的参数编写SQL Server 2008查询
|| 我有4个参数正在传递给查询。我的要求是返回结果,即使其中任何一个都为null。我们必须在where子句中编写if条件还是编写动态查询?该参数的其中一个是datetime
,另一个是范围变量datetime
。
提前致谢。
解决方法
如果我理解正确,则您需要准备一个where子句,该子句也可以处理NULL参数值。
因此,这可能是一个解决方案:
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)
, 我认为您要的是“ 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。