У меня есть следующий запрос, где тип данных accc_no - varchar, wthdrl_amt - деньги, sav_amt - деньги, trxn_id - bigint.Арифметическая ошибка переполнения преобразования выражения в тип данных money
DECLARE @acc_no NVARCHAR(MAX) = N''
DECLARE @symbol NVARCHAR(MAX) = N''
DECLARE @loop int = 0
DECLARE @loop2 int = 0
SELECT @symbol += N'' + acc_no + ',' FROM sav_transaction GROUP BY acc_no HAVING (SUM(sav_amt)<SUM(wthdrl_amt))
IF LEN(@symbol) > 1
BEGIN
WHILE @loop < LEN(@symbol)
BEGIN
SET @loop2 = CHARINDEX(',', @symbol ,@loop)
SET @acc_no = SUBSTRING(@symbol, @loop, @[email protected])
UPDATE sav_transaction
SET wthdrl_amt = wthdrl_amt-(SELECT ABS(SUM(sav_amt) - SUM(wthdrl_amt))
FROM sav_transaction WHERE acc_no = @acc_no)
WHERE acc_no = @acc_no AND trxn_id = (SELECT MAX(trxn_id) FROM sav_transaction WHERE acc_no = @acc_no)
END
SET @loop = @loop2 +1
END
Но когда я запускаю это, я получаю сообщение об ошибке:
Msg 8115, Level 16, State 2, Line 15
Arithmetic overflow error converting expression to data type money.
The statement has been terminated.
Я использовал поле с тем же типом данных. Но не удалось найти ошибку.
Пожалуйста, объясните, что вы сделали –
изменил эту часть ВЫБЕРИТЕ @symbol + = N '' + CAST (acc_no AS NVARCHAR (MAX)) + в acc_no не NVARCHAR и имеет преимущество во время операции добавления и пытается cast N '' и другие дополнения к его типу – DhruvJoshi
Отправьте это в свой ответ man –