gpt4 book ai didi

asp.net - 存储过程Where子句参数

转载 作者:行者123 更新时间:2023-12-03 02:48:41 25 4
gpt4 key购买 nike

我有一个 ASP.net 搜索页面,用户可以在其中输入一个或多个搜索条件。该页面调用存储过程来查询 MS SQL Server 2008 数据库。

部分搜索条件是单个日期或日期范围。如果用户提供 Date1,我们将搜索单个日期。如果用户提供 Date1 和 Date2,我们将搜索日期范围。

我的问题是在存储过程中编码此逻辑。

@Date1 datetime
@Date2 datetime
..other search params...

所以有三个条件:

  1. @Date1 和 @Date2 均为 null(用户未搜索日期)
  2. @Date1 不为 null,@Date2 为 null(用户正在搜索单个日期)
  3. @Date1 不为 null,@Date2 不为 null(用户正在搜索日期范围)

我不知道如何构造 WHERE 子句来处理这三种可能的情况。

我熟悉 ISNULL()COALESCE()

非常感谢任何提示或建议。

最佳答案

CREATE PROCEDURE BLABLABLA(
@DATE1 DATETIME = NULL,
@DATE2 DATETIME = NULL
)
AS
BEGIN
SELECT COL1, COL2
FROM THE_TABLE
WHERE
THE_TABLE.DATETIMEFIELD BETWEEN
ISNULL(@DATE1, THE_TABLE.DATETIMEFIELD)
AND COALESCE(@DATE2, @DATE1, THE_TABLE.DATETIMEFIELD)
END

另一种选择,失去一些表达能力,但可能使用索引,可能是:

CREATE PROCEDURE BLABLABLA(
@DATE1 DATETIME = NULL,
@DATE2 DATETIME = NULL
)
AS
BEGIN
SELECT COL1, COL2
FROM THE_TABLE
WHERE
(THE_TABLE.DATETIMEFIELD >= @DATE1 OR @DATE1 IS NULL)
AND (THE_TABLE.DATETIMEFIELD <= @DATE2
OR THE_TABLE.DATETIMEFIELD = @DATE1
OR (@DATE1 IS NULL AND @DATE2 IS NULL))
END

关于asp.net - 存储过程Where子句参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6272958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com