【问题标题】:Stored procedure : assign date if passed parameters are null存储过程:如果传递的参数为空,则分配日期
【发布时间】:2021-11-11 14:02:45
【问题描述】:

当传递的参数为空时,我正在尝试为存储过程分配值。

如果 startDate 或 endDate 为空,我想给它们赋值

喜欢

@StartDate = '1990-01-01'
@EndDate = DATEADD(YEARS, 30, GETDATE()) -- 30 years from now.

我该怎么做?

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 > @startDate
      AND UpdatedDate < @EndDate

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案1】:
    CREATE OR ALTER PROCEDURE dbo.GetByProductID
    (
        @ProductID INT,
        @StartDate DATETIME = NULL
        @EndDate DATETIME = NULL
    )
    AS
        set @StartDate = coalesce(@StartDate,'1990-01-01')
        set @EndDate = coalesce(@EndDate,DATEADD(YEARS, 30, GETDATE())) -- 30 years from now.
    
        SELECT ProductId, Name, InsertedDate, UpdatedDate
        FROM Products
        WHERE ProductId = @ProductID
          AND InsertedDate > @startDate
          AND UpdatedDate < @EndDate
    

    【讨论】:

    • caolesce 还是 isnull?哪个更高效?
    • 在大多数情况下它们的表现都是一样的,包括这里,阅读这篇文章了解更多信息mssqltips.com/sqlservertip/2689/…
    • 两者都可能比另一个更有效,@Chatra。它们只是相似的函数。
    猜你喜欢
    • 2020-03-22
    • 1970-01-01
    • 2012-03-02
    • 2011-11-22
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    相关资源
    最近更新 更多