首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当提供的值为null时删除where子句

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

Stack Overflow用户
提问于 2018-05-17 21:26:03
回答 1查看 180关注 0票数 2

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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子句必须为

代码语言:javascript
代码运行次数:0
运行
复制
SELECT * 
FROM footable 
WHERE Todate = @TO

有没有办法实现这一点?

非常感谢你的回答。但这也不能解决我的问题,因为@From@To都是可选的。按照这种方法,我的代码希望

代码语言:javascript
代码运行次数:0
运行
复制
SELECT * 
FROM footable 
WHERE (Fromdate = @From OR @From IS NULL)
  AND (Todate = @TO OR @To IS NULL)

执行此操作将导致整个表。

EN

回答 1

Stack Overflow用户

发布于 2018-05-17 21:28:04

只需使用正常的逻辑来处理它。

代码语言:javascript
代码运行次数:0
运行
复制
SELECT * 
FROM footable 
WHERE (Fromdate = @From or @From is null)
AND Todate = @TO
option (OPTIMIZE FOR (@From UNKNOWN))

编辑:在中添加了option子句,以便查询计划针对未知值进行优化,而不会受到参数嗅探的影响,从而在缓存中创建初始计划。或者,如果用法是已知的,您可以使用一个已知值来生成您希望的计划。

在沿着option (recompile)的路线走下去之前,我会首先选择这个选项--这需要每次都生成计划。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50392661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档