当提供的值为null时,删除where子句

Sri*_*Sri 2 sql sql-server

我想根据提供的值自动附加where子句

让我们考虑一个包含select查询的存储过程

CREATE PROCEDURE [dbo].[example]
    @From DATETIME,
    @T0 DATETIME
AS
  BEGIN TRY
      SELECT * 
      FROM footable 
      WHERE Fromdate = @From AND Todate = @TO
 END TRY
Run Code Online (Sandbox Code Playgroud)

如果@From的值为null,那么where子句必须是

SELECT * 
FROM footable 
WHERE Todate = @TO
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个?

非常感谢你的回答.但无论哪种,因为这并没有解决我的问题@From,并@To都是可选的.按照这种方法,我的代码会喜欢

SELECT * 
FROM footable 
WHERE (Fromdate = @From OR @From IS NULL)
  AND (Todate = @TO OR @To IS NULL)
Run Code Online (Sandbox Code Playgroud)

执行此操作会导致整个表格.

And*_*rew 8

只需使用普通逻辑来处理它.

SELECT * 
FROM footable 
WHERE (Fromdate = @From or @From is null)
AND Todate = @TO
option (OPTIMIZE FOR (@From UNKNOWN))
Run Code Online (Sandbox Code Playgroud)

编辑:添加了option子句,以便针对未知值优化查询计划,并且不受参数嗅探影响以在缓存中创建初始计划.或者,如果已知用法,则可以使用生成所需计划的已知值.

我会先选择这个选项,然后再沿着这条路线前进option (recompile)- 这需要每次都生成计划.