Ошибка арифметического переполнения при преобразовании numeric в тип данных numeric при работе с базой данных сервера
Я использую хранимые процедуры для обновления таблиц или вставки в таблицы.
При работе с локальной базой данных (база данных в той же системе и приложение также в той же системе, нет сети или общей базы данных) все работают хорошо без каких-либо ошибок.
Мое приложение находится в Visual C#.
Когда я преобразовал приложение для использования в многопользовательской среде и использовал ту же существующую базу данных с теми же хранимыми процедурами с теми же значениями и ту же версию SQLServer Express, я столкнулся с ошибкой
"Ошибка арифметического переполнения при преобразовании numeric в тип данных numeric".
Я попытался ограничить переменные, объявив их в виде десятичной дроби с заданной длиной, и увеличил столбцы таблицы на одну десятичную дробь больше, чем было объявлено в хранимой процедуре. Но та же ошибка приходит и не может найти решение.
Существуют ли какие-либо ограничения с SQL server по сравнению с локальной системной базой данных и базой данных удаленного сервера?
И то и другое-одни и те же данные, одни и те же значения, один и тот же код, одно и то же приложение. Ничего не изменилось, кроме строки подключения.
Код хранимой процедуры, который я использую, выглядит следующим образом.
USE [inventoryDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON SET NUMERIC_ROUNDABORT OFF -- this is added now because in some place someone said that it will overcome the error. GO CREATE PROCEDURE [dbo].[SalesMainInsert] ( @cblno INT=0, @bldate DATETIME ='', @rname VARCHAR(50)='', @custname VARCHAR(50)='', @custcode VARCHAR(50)='', @smaname VARCHAR(50)='', @mblno VARCHAR(50)='', @bldis1per decimal(20,2)=0, @bldis1amt decimal(20,2)=0, @bldis2 decimal(20,2)=0, @bldis3 decimal(20,2)=0, @dis3narr VARCHAR(500)='', @blcash BIT=0, @billnet decimal(20,2)=0, @bltax decimal(20,2)=0, @addless decimal(20,3)=0, @billtot decimal(20,3)= 0, @rndval decimal(9,2)=0, @blgross decimal(20,2)=0, @remarks VARCHAR(50)='', @TotalCessAmt decimal(20,3)=0, @TotalAddlCessAmt decimal(20,3)=0, @cstat AS BIT = 0, @bstat AS VARCHAR(10)='', @custtype AS VARCHAR(1)='', @ReturnValue AS INT = 0 OUT ) AS BEGIN INSERT INTO dbo.salesHDB ( cblno, bldate, rname, custname, custcode, smaname, mblno, bldis1per, bldis1amt, bldis2, bldis3, dis3narr, blcash, billnet, bltax, addless, bltotal, rndval, blgross, remarks, TotalCessAmt, TotalAddlCessAmt, cstatus, bstatus, custtype ) VALUES ( @cblno, @bldate, @rname, @custname, @custcode, @smaname, @mblno, @bldis1per, @bldis1amt, @bldis2, @bldis3, @dis3narr, @blcash, @billnet, @bltax, @addless, @billtot, @rndval, @blgross, @remarks, @TotalCessAmt, @TotalAddlCessAmt, @cstat, @bstat, @custtype ) IF @@ERROR = 0 BEGIN SET @ReturnValue = 1 END ELSE BEGIN SET @ReturnValue = -1 END END
Что я уже пробовал:
Я погуглил, но не нашел подходящего решения