我希望根据提供的值自动附加where子句
让我们考虑一个包含select查询的存储过程
CREATE PROCEDURE [dbo].[example]
@From DATETIME,
@T0 DATETIME
AS
BEGIN TRY
SELECT *
FROM footable
WHERE Fromdate = @From AND Todate = @TO
END TRY
如果@From的值为null,则where子句必须为
SELECT *
FROM footable
WHERE Todate = @TO
有没有办法实现这一点?
非常感谢你的回答。但这也不能解决我的问题,因为@From
和@To
都是可选的。按照这种方法,我的代码希望
SELECT *
FROM footable
WHERE (Fromdate = @From OR @From IS NULL)
AND (Todate = @TO OR @To IS NULL)
执行此操作将导致整个表。
发布于 2018-05-17 13:28:04
只需使用正常的逻辑来处理它。
SELECT *
FROM footable
WHERE (Fromdate = @From or @From is null)
AND Todate = @TO
option (OPTIMIZE FOR (@From UNKNOWN))
编辑:在中添加了option
子句,以便查询计划针对未知值进行优化,而不会受到参数嗅探的影响,从而在缓存中创建初始计划。或者,如果用法是已知的,您可以使用一个已知值来生成您希望的计划。
在沿着option (recompile)
的路线走下去之前,我会首先选择这个选项--这需要每次都生成计划。
https://stackoverflow.com/questions/50392661
复制