在此存儲過程中,在where條件中,如果@startDate和@EndDate值爲null,那麼如何使用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
提前告誡。
備註:您應該**不要**爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –