我有一个日期表调用 [BadDates],它只有一列,其中每条记录都是要排除的日期。我有一个UDF如下:
CREATE FUNCTION [dbo].[udf_GetDateInBusinessDays]
(
@StartDate datetime, --Start Date
@NumberDays int --Good days ahead
)
RETURNS datetime
AS
BEGIN
-- Declare the return variable here
DECLARE @ReturnDate datetime
SET @ReturnDate = @StartDate
DECLARE @Counter int
SET @Counter = 0
WHILE @Counter < @NumberDays
BEGIN
SET @ReturnDate = DateAdd(d,1,@ReturnDate)
IF ((SELECT COUNT(ID)
FROM dbo.[BadDates]
WHERE StartDate = @ReturnDate) = 0)
BEGIN
SET @Counter = @Counter + 1
END
END
RETURN @ReturnDate
END
此 UDF 效果很好,但处理速度很慢。使用它的存储过程在每条记录中运行 UDF。是否有其他方法可以以更快的方法提供相同的功能。
任何帮助是极大的赞赏!