Hvad er der forkert her
Jeg har en stored procedure som følgendeAlter PROCEDURE proc_FindNewNextDate AS
DECLARE c_Candidates CURSOR FOR
SELECT fldFrekvens,
fldCalcDate,
fldLastCal
FROM tblStamData
WHERE fldFrekvens > 0
FOR UPDATE OF fldNextCal
DECLARE @currFrekvens INTEGER
DECLARE @currCalcDate DATETIME
DECLARE @currLastDate DATETIME
DECLARE @i INTEGER
OPEN c_Candidates
FETCH NEXT FROM c_Candidates INTO @currFrekvens, @currCalcDate, @currLastDate
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @i = 1
WHILE (DATEADD(mm, @i*@currFrekvens, @currCalcDate) <= @currLastDate OR DATEADD(mm, @i*@currFrekvens, @currCalcDate) <= GETDATE())
SET @i = @i + 1
UPDATE tblStamData SET fldNextCal = DATEADD(mm, @i*@currFrekvens, @currCalcDate) WHERE CURRENT OF c_Candidates
FETCH NEXT FROM c_Candidates INTO @currFrekvens, @currCalcDate, @currLastDate
END
CLOSE c_Candidates
DEALLOCATE c_Candidates
Forklaring :
fldFrekvens - antal måneder mellem kalibrering
fldCalcDate - dato hvor beregning starter fra
fldLastCal - dato hvor værktøj sidst er kalibreret
fldNextCal - dato for næste kalibrering
Det der skal ske er at der hele tiden lægges fldFrekvens måneder til fldCalcDate indtil den første dato efter dags dato. Den fundne dato skrives så i fldNextCal
Den virker ikke helt efter hensigten. Det der sker forkert er så vidt jeg kan se at der bliver lagt fldFrekvens måneder for meget til før den nye dato skrives i fldNextCal, men jeg kan ikke lige se hvorfor.
Kan nogen hjælpe ?
