Следното работи за мен:
declare @TransactionDate DATETIME
DECLARE @TransactionDay tinyint
declare @startDate datetime
declare @startDay int
declare @NextTransactionDate datetime
--Monday
set @TransactionDate = '2011-05-05'
SET @TransactionDay = DATEPART(dw, @TransactionDate)
--Wednesday
set @startDate = '2011-04-27'
set @startDay = datepart(dw,@startDate)
set @NextTransactionDate= DATEADD(DAY, ((@startDay - @TransactionDay) + 7) % 7 ,@TransactionDate);
select @startDay, DATEPART(dw, @NextTransactionDate), @NextTransactionDate
За да обясня същината на това, намирам разликата в деня от седмицата за началната дата и датата на транзакция. Добавям 14 към него, защото отрицателните числа по модула на положителните числа водят до отрицателно число, което би поставило датата на следващата ви транзакция в миналото (а вие не искате това). Най-лошият случай е, когато @startDay е 1 и @TransactionDay е 7, което води до разлика от -6. Добавянето на 7 гарантира, че тази разлика е положителна, но все още е в същия клас на еквивалентност като действителната разлика в пръстена n mod 7 (съжалявам... аз съм малко маниак по математика).