[BadDates] という日付のテーブルがあります。すべてのレコードが除外する日付である列が 1 つだけあります。次のような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 を実行します。これと同じ機能をより高速な方法で提供する他の方法はありますか。
どんな助けでも大歓迎です!