【问题标题】:Stored procedure returns no records when datetime filters are NULL?当日期时间过滤器为 NULL 时,存储过程不返回任何记录?
【发布时间】:2016-03-21 10:12:04
【问题描述】:

考虑这个存储过程:

CREATE PROCEDURE [dbo].[sp_getclients]
    @FromDate datetime, @ToDate datetime
AS
BEGIN
    SET NOCOUNT ON;

    SELECT * 
    FROM CM.Clients
    --If both dates are not NULL then also check PurchaseDate to be between them
    WHERE
        (@FromDate IS NOT NULL AND @ToDate IS NOT NULL 
         AND Clients.PurchaseDate >= @FromDate 
         AND Clients.PurchaseDate <= @ToDate)
        OR
        --If @FromDate is not NULL AND @ToDate IS NULL then also check PurchaseDate to be greater than @FromDate
        (@FromDate IS NOT NULL AND @ToDate IS NULL 
         AND Clients.PurchaseDate >= @FromDate)
        OR
        --If @FromDate is NULL AND @ToDate IS NOT NULL then also check Trans_Date to be less than @ToDate 
        (@FromDate IS NULL AND @ToDate IS NOT NULL 
         AND Clients.PurchaseDate <= @ToDate)
END

当我使用 NULL 参数执行这个存储过程时,不会返回任何记录。

知道我在哪里出错了吗?

【问题讨论】:

  • (@p IS NULL or col = @p) 对于每个参数。
  • @jarlh:对于哪个参数?
  • 所有这些,至少是可选的(可为空的)。根据需要使用 rel-op。

标签: sql sql-server stored-procedures sql-server-2012


【解决方案1】:

添加这个:

OR
(@FromDate IS NULL AND @ToDate IS NULL)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2019-04-20
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2017-05-06
    • 2017-09-06
    相关资源
    最近更新 更多