【发布时间】:2010-10-26 15:18:03
【问题描述】:
我有一个名为 [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。是否有其他方法可以更快地提供相同的功能。
非常感谢任何帮助!
【问题讨论】:
-
您能用高级英语描述您要完成的工作吗?
标签: sql recursion performance user-defined-functions