gpt4 book ai didi

c# - 日期字段中具有可为空值的存储过程

转载 作者:行者123 更新时间:2023-11-30 14:33:21 27 4
gpt4 key购买 nike

在此存储过程中,在 where 条件下,如果 @startDate 和 @EndDate 值为空,那么如何使用 COALESCE 处理它。

CREATE PROCEDURE  dbo.SP_ManageLeaveSearch

@StartDate datetime,
@EndDate datetime,

@UserName CHAR(100),
@MarketID INT

AS
BEGIN
SELECT d1.UserName,c1.HouseName,c.StartDate,c.EndDate
FROM table1 c
Inner JOIN table2 d1 ON c.UserID = d1.UserID


WHERE
(

(
(@StartDate BETWEEN StartDate AND EndDate)
OR
(@EndDate BETWEEN StartDate AND EndDate)
OR
(
(@StartDate <= Startdate AND @EndDate>=EndDate)
)
)
AND
(

d1.UserName = COALESCE(@UserName, d1.UserName)
)

)

END

提前致谢。

最佳答案

这应该适合你:

CREATE PROCEDURE  dbo.ManageLeaveSearch

@StartDate datetime = NULL,
@EndDate datetime = NULL,

@UserName CHAR(100) = NULL,
@MarketID INT

AS
BEGIN
SELECT d1.UserName,c1.HouseName,c.StartDate,c.EndDate
FROM table1 c
Inner JOIN table2 d1 ON c.UserID = d1.UserID


WHERE
COALESCE(@StartDate,StartDate) <= EndDate AND
StartDate <= COALESCE(@EndDate,EndDate) AND
d1.UserName = COALESCE(@UserName, d1.UserName)

END

注意事项:

  • 不要使用 sp_ 前缀命名存储过程 - 它是为 Microsoft 的 system procedures 保留的.
  • 我使用了更简单的条件来确定是否存在重叠。如果范围 1 在范围 2 结束之前开始,范围 2 在范围 1 结束之前开始,则两个范围之间存在重叠。
  • 我已经为那些应该可以为 null 的参数指定了默认值。

关于c# - 日期字段中具有可为空值的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16685329/

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