Я продолжаю получать эту ошибку, когда запускаю простой оператор обновления.Ошибка конверсии в курсоре?
Msg 16922, Level 16, State 1, Procedure TRG_MEM_BALANCE_AWW, Line 72
Cursor Fetch: Implicit conversion from data type datetime to decimal is not allowed.
Это мой код, который у меня есть для запуска. Я не вижу, что неправильно преобразуется?
ALTER TRIGGER [dbo].[TRG_MEM_BALANCE_AWW]
ON [dbo].[DETAILRENTAL]
AFTER INSERT, DELETE, UPDATE
AS
BEGIN
IF(EXISTS(SELECT * FROM inserted)
AND
EXISTS(SELECT * FROM deleted))
BEGIN
DECLARE CURSORFORUPDATE CURSOR FOR
SELECT
I.RENT_NUM, I.DETAIL_DUEDATE, I.DETAIL_RETURNDATE,
I.DETAIL_DAILYLATEFEE, D.DETAIL_DUEDATE,
D.DETAIL_RETURNDATE, D.DETAIL_DAILYLATEFEE
FROM
inserted I
INNER JOIN
DELETED D ON I.Rent_Num = D.Rent_Num
AND I.Vid_Num = D.Vid_Num
DECLARE @RENT_NUM INT
DECLARE @RETURN_DATE_NEW DATETIME
DECLARE @DUE_DATE_OLD DATETIME
DECLARE @DUE_DATE_NEW DATETIME
DECLARE @RETURN_DATE_OLD DATETIME
DECLARE @DAILY_LATE_FEE_NEW DECIMAL(5,2)
DECLARE @DAILY_LATE_FEE_OLD DECIMAL(5,2)
DECLARE @LATE_FEE_PRIOR DECIMAL(5,2)
DECLARE @LATE_FEE_AFTER DECIMAL(5,2)
DECLARE @CHANGE DECIMAL (5,2)
OPEN CURSORFORUPDATE
FETCH NEXT FROM CURSORFORUPDATE INTO @RENT_NUM, @DUE_DATE_NEW, @RETURN_DATE_NEW, @DAILY_LATE_FEE_NEW, @DUE_DATE_OLD, @RETURN_DATE_OLD, @DAILY_LATE_FEE_OLD
WHILE (@@FETCH_STATUS = 0)
BEGIN
--A
IF(@RETURN_DATE_OLD > @DUE_DATE_OLD)
BEGIN
SELECT @LATE_FEE_PRIOR = DATEDIFF(DAY, @DUE_DATE_OLD, @RETURN_DATE_OLD) * @DAILY_LATE_FEE_OLD
END
ELSE
SELECT @LATE_FEE_PRIOR = 0
--B
IF(@RETURN_DATE_NEW > @DUE_DATE_NEW)
BEGIN
SELECT @LATE_FEE_AFTER = DATEDIFF(DAY, @DUE_DATE_NEW, @RETURN_DATE_NEW) * @DAILY_LATE_FEE_NEW
END
ELSE
SELECT @LATE_FEE_AFTER = 0
--C
SELECT @CHANGE = @LATE_FEE_AFTER - @LATE_FEE_PRIOR
--D
IF(@CHANGE <> 0)
BEGIN
DECLARE @MEM_NUM INT
SELECT @MEM_NUM = M.Mem_Num
FROM RENTAL R INNER JOIN MEMBERSHIP M ON R.MEM_NUM = M.MEM_NUM AND R.RENT_NUM = @RENT_NUM
UPDATE MEMBERSHIP
SET Mem_Balance = MEM_BALANCE + @CHANGE
WHERE Mem_Num = @MEM_NUM
FETCH NEXT FROM CURSORFORUPDATE
INTO @RENT_NUM, @DUE_DATE_NEW, @DUE_DATE_OLD, @RETURN_DATE_NEW, @RETURN_DATE_OLD, @DAILY_LATE_FEE_NEW, @DAILY_LATE_FEE_OLD
END
CLOSE CURSORFORUPDATE
DEALLOCATE CURSORFORUPDATE
END
END
END
Обновление Я бегущая является
UPDATE DETAILRENTAL
SET DETAIL_RETURNDATE = 2013-03-10
WHERE RENT_NUM = 1001
Это делает его так, что фильм возвращается в конце таблицы DETAILRENTAL, который должен обновлять баланс члена в таблице ЧЛЕНСТВО. Будем очень благодарны за любые идеи о том, как исправить эту ошибку.
Я добавил тег базы данных. Синтаксис - это, очевидно, SQL Server. –