Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Arithmetic overflow error converting numeric to data type numeric.  [new]
_asz
Member

Откуда: Москва
Сообщений: 175
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fun_ndiv2]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fun_ndiv2]
GO

/* Функция делить два числа типа numeric(28,10) с указаным округлением */
CREATE FUNCTION fun_ndiv2
	(
		@fVal numeric(28,10), 
		@sVal numeric(28,4)
	)  
RETURNS numeric(28,20) AS  

BEGIN 

	declare @result numeric(28,20)
		set @result =  @fVal / @sVal
	return @result

END
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


declare 
  @SumRestAcc numeric(28,10)
, @SumAccDb numeric(28,10)
, @SumRestDoc numeric(28,10)
, @SumDocDb numeric(28,10)
, @res numeric(28,20)

select 
  @SumRestAcc = 1135191030227.0362115572
, @SumAccDb = 0.0000000000
, @SumRestDoc = 149.0400000000
, @SumDocDb = 0.0000000000

-- @SumRestAcc + @SumAccDb, @SumRestDoc + @SumDocDb
select (@SumRestAcc +@SumAccDb) ,  (@SumRestDoc + @SumDocDb)

 select res = dbo.fun_ndiv2(@SumRestAcc + @SumAccDb, @SumRestDoc + @SumDocDb)
-- 
-- -- select @res
-- select @@error




-- (1 row(s) affected)
-- 
-- Server: Msg 8115, Level 16, State 8, Procedure fun_ndiv2, Line 13
-- Arithmetic overflow error converting numeric to data type numeric.
22 июн 05, 13:46    [1640067]     Ответить | Цитировать Сообщить модератору
 Re: Arithmetic overflow error converting numeric to data type numeric.  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
@sVal numeric(28,4)
22 июн 05, 13:54    [1640122]     Ответить | Цитировать Сообщить модератору
 Re: Arithmetic overflow error converting numeric to data type numeric.  [new]
Glory
Member

Откуда:
Сообщений: 104760
И @SumRestAcc + @SumAccDb и @SumRestDoc + @SumDocDb имеют тип numeric(29,10). А входные параметры вашей функции - типы с мешьшей точностью.
22 июн 05, 13:59    [1640152]     Ответить | Цитировать Сообщить модератору
 Re: Arithmetic overflow error converting numeric to data type numeric.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fun_ndiv2]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fun_ndiv2]
GO

/* Функция делить два числа типа numeric(28,10) с указаным округлением */
CREATE FUNCTION fun_ndiv2
	(
		@fVal numeric(28,10), 
		@sVal numeric(28,10)
	)  
RETURNS numeric(38,20) AS  

BEGIN 

	  return @fVal / @sVal
END
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


declare 
  @SumRestAcc numeric(28,10)
, @SumAccDb numeric(28,10)
, @SumRestDoc numeric(28,10)
, @SumDocDb numeric(28,10)
, @res numeric(38,20)

select 
  @SumRestAcc = 1135191030227.0362115572
, @SumAccDb = 0.0000000000
, @SumRestDoc = 149.0400000000
, @SumDocDb = 0.0000000000

-- @SumRestAcc + @SumAccDb, @SumRestDoc + @SumDocDb
select (@SumRestAcc +@SumAccDb) ,  (@SumRestDoc + @SumDocDb)

 select res = dbo.fun_ndiv2(@SumRestAcc + @SumAccDb, @SumRestDoc + @SumDocDb)
22 июн 05, 14:04    [1640196]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить