You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL存储过程传入日期参数为null时如何设置指定默认值

SQL存储过程调整方案

首先修正原代码的两处隐含问题:

  1. 参数定义中@StartDate DATETIME = NULL后缺少逗号,会触发语法错误
  2. 日期运算函数DATEADD的时间单位参数为单数YEAR,写YEARS会报错

方案1:存储过程开头统一处理参数(推荐)

这种方式逻辑清晰,后续代码复用日期参数时无需重复判空,可维护性更高。

CREATE OR ALTER PROCEDURE dbo.GetByProductID
(
    @ProductID INT,
    @StartDate DATETIME = NULL,
    @EndDate DATETIME = NULL
)
AS
    -- 为空参数赋默认值
    SET @StartDate = ISNULL(@StartDate, '1990-01-01')
    SET @EndDate = ISNULL(@EndDate, DATEADD(YEAR, 30, GETDATE()))

    SELECT ProductId, Name, InsertedDate, UpdatedDate
    FROM Products
    WHERE ProductId = @ProductID
      AND InsertedDate > @StartDate
      AND UpdatedDate < @EndDate

方案2:直接在查询条件中处理

如果不需要复用日期参数,也可以直接在WHERE子句中完成判空逻辑:

CREATE OR ALTER PROCEDURE dbo.GetByProductID
(
    @ProductID INT,
    @StartDate DATETIME = NULL,
    @EndDate DATETIME = NULL
)
AS
    SELECT ProductId, Name, InsertedDate, UpdatedDate
    FROM Products
    WHERE ProductId = @ProductID
      AND InsertedDate > ISNULL(@StartDate, '1990-01-01')
      AND UpdatedDate < ISNULL(@EndDate, DATEADD(YEAR, 30, GETDATE()))

两种方案都可以实现需求,优先选方案1即可。

内容的提问来源于stack exchange,提问作者Chatra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:15:04