【发布时间】:2018-10-27 19:02:59
【问题描述】:
我想根据提供的值自动附加 where 子句
让我们考虑一个包含选择查询的存储过程
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)
执行此操作会导致整个表。
【问题讨论】:
-
Andrew 的解决方案是解决这个问题的好方法。但请注意,您可能会遇到性能问题,尤其是随着数量或参数的增加。 Gail Shaw 在这里有一篇关于这类事情的精彩文章。 sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries
-
我不确定您提出的问题是否正确,您似乎想过滤介于日期参数之间的数据,而这不会因为您匹配日期次 与
@from = fromdate。如果我错了,请道歉 -
@Tanner - 我认为你是对的,但鉴于它来自
footable,我不确定代码是否代表正确的程序,但只是为了解决问题。参数@T0之后是@TO(从零到O) -
@Tanner :你是绝对正确的。这不是我试图编写的确切代码。但只是为了这个问题。@Andrew:完全正确,先生
标签: sql sql-server