tipo error desbordamiento datos convertir aritmético sql sql-server-2008

sql - Error de desbordamiento aritmético al convertir numérico a tipo de datos numérico



error de desbordamiento aritmético al convertir identity al tipo de datos tinyint (3)

Sigo recibiendo este mensaje de error cada vez que ejecuto esta consulta:

Msg 8115, Level 16, State 8, Line 33 Arithmetic overflow error converting numeric to data type numeric. The statement has been terminated.

Pero si cambio la tabla de creación a (7,0), no obtengo el mensaje de error. Pero necesito que mis datos se muestren como un decimal. He intentado 8,3 no funciona.

¿Hay alguien que pueda ayudarme a trabajar en esto? Cualquier ayuda será muy apreciada.

DECLARE @StartDate AS DATETIME DECLARE @StartDate_y AS DATETIME DECLARE @EndDate AS DATETIME DECLARE @temp_y AS DATETIME SET @temp_y = Dateadd(yy, Datediff(yy, 0, Getdate()), 0) SET @StartDate_y = Dateadd(dd, 1 - Datepart(dw, Dateadd("ww", -2, @temp_y)), Dateadd("ww", -2, @temp_y)) SET @StartDate = Dateadd(dd, 1 - Datepart(dw, Dateadd("ww", -2, Getdate())), Dateadd("ww", -2, Getdate())) SET @EndDate = Dateadd(dd, 6, @StartDate) --temp table to hold all cities in list CREATE TABLE ##temp ( city VARCHAR(50) ) INSERT INTO ##temp VALUES (''ABERDEEN''), (''CHESAPEAKE''), (''Preffered-Seafood/CHICAGO''), (''Preffered-Redist/CHICAGO''), (''CLACKAMAS''), (''COLUMBUS''), (''CONKLIN''), (''DENVER''), (''FORT WORTH''), (''HANOVER PARK''), (''JACKSONVILLE''), (''LAKELAND''), (''MONTGOMERY''), (''PFW-NORTHEAST''), (''PFW-SOUTHEAST''), (''RIVERSIDE''), (''TRENTON,CANADA''), (''VERNON'') --temp to hold data for the cities CREATE TABLE #temp ( city VARCHAR(50), ytdshipments INT, ytdtotalweight DECIMAL(7, 2) NOT NULL, ytdtotalcharges DECIMAL (7, 2) NOT NULL --YTDRevperPound decimal (7,2) not null ) INSERT INTO #temp SELECT ##temp.city, 0, 0, 0 FROM ##temp INSERT #temp -- YTD shipments/Charges/Weight by city SELECT city = CASE WHEN nameaddrmstr_1.city IN( ''ABERDEEN'', ''CHESAPEAKE'', ''CHICAGO'' , ''CLACKAMAS'', ''COLUMBUS'', ''CONKLIN'', ''DENVER'', ''FORT WORTH'', ''HANOVER PARK'', ''JACKSONVILLE'', ''LAKELAND'' , ''MONTGOMERY'' , ''RIVERSIDE'', ''TRENTON'', ''VERNON'' ) THEN CASE WHEN nameaddrmstr_1.city = ''CHICAGO'' AND h.shipr = ''PREFRESVS'' THEN ''Preffered-Redist/CHICAGO'' WHEN nameaddrmstr_1.city = ''TRENTON'' AND nameaddrmstr_1.city = ''CA'' THEN ''TRENTON,CANADA'' ELSE nameaddrmstr_1.city END ELSE ''Other'' END, ytdshipments = COUNT(CONVERT(VARCHAR(10), h.dateshipped, 101)), ytdtotalweight =SUM(CASE WHEN h.totaldimwgt > h.totalwgt THEN h.totaldimwgt ELSE h.totalwgt END), ytdtotalcharges = SUM (cs.totalestrevcharges) --YTDRevperPound = convert(decimal(7,2),sum (cs.TotalEstRevCharges )/sum( CASE WHEN h.TotalDimWGT > > h.TotalWGT THEN h.TotalDimWGT ELSE h.TotalWGT END )) FROM as400.dbo.hawb AS h WITH(nolock) INNER JOIN as400.dbo.chargesummary AS cs ON h.hawbnum = cs.hawbnum LEFT OUTER JOIN as400.dbo.nameaddrmstr AS nameaddrmstr_1 ON h.shipr = nameaddrmstr_1.nameaddrcode WHERE h.dateshipped >= ''01/01/2010'' AND h.dateshipped <= ''12/19/2010'' --WHERE H.DateShipped >= >= @StartDate_y AND H.dateshipped <= @EndDate AND h.cust IN( ''DARDENREED'', ''MAINEDARDE'', ''MBMRIVRSDE'', ''MBMCOLUMBS'', ''MBMLAKELND'', ''MBMFTWORTH'', ''SYGMACOLUM'', ''SYGMANETW6'', ''MAI215'', ''MBMMNTGMRY'' ) GROUP BY CASE WHEN nameaddrmstr_1.city IN( ''ABERDEEN'', ''CHESAPEAKE'', ''CHICAGO'', ''CLACKAMAS'', ''COLUMBUS'', ''CONKLIN'', ''DENVER'', ''FORT WORTH'', ''HANOVER PARK'', ''JACKSONVILLE'', ''LAKELAND'', ''MONTGOMERY'' , ''RIVERSIDE'', ''TRENTON'', ''VERNON'' ) THEN CASE WHEN nameaddrmstr_1.city = ''CHICAGO'' AND h.shipr = ''PREFRESVS'' THEN ''Preffered-Redist/CHICAGO'' WHEN nameaddrmstr_1.city = ''TRENTON'' AND nameaddrmstr_1.city = ''CA'' THEN ''TRENTON,CANADA'' ELSE nameaddrmstr_1.city END ELSE ''Other'' END SELECT #temp.city AS city, MAX(#temp.ytdshipments) AS ytdshipments, MAX(#temp.ytdtotalweight) AS ytdtotalweight, MAX(#temp.ytdtotalcharges) AS ytdtotalcharges FROM #temp WITH(nolock) LEFT OUTER JOIN ##temp ON ##temp.city = #temp.city GROUP BY #temp.city DROP TABLE #temp DROP TABLE ##temp


Si desea reducir el tamaño a decimal (7,2) de decimal (9,2) tendrá que dar cuenta de los datos existentes con valores mayores para caber en decimal (7,2). O bien, tendrá que eliminar esos números truncarlos para que quepan en su nuevo tamaño. Si no hubo datos para el campo que está tratando de actualizar, lo hará automáticamente sin problemas


Siento que necesito aclarar algo muy importante, para otros (como mi compañero de trabajo) que encontraron este hilo y obtuvieron la información incorrecta.

La respuesta dada ("Intentar decimal (9,2) o decimal (10,2) o lo que sea") es correcta, pero la razón ("aumentar el número de dígitos antes del decimal") es incorrecta.

decimal (p, s) y numérico (p, s) ambos especifican una Precisión y una Escala . La "precisión" no es la cantidad de dígitos a la izquierda del decimal, sino la precisión total del número.

Por ejemplo: decimal (2,1) cubre de 0.0 a 9.9, porque la precisión es de 2 dígitos (00 a 99) y la escala es 1. decimal (4,1) abarca de 000.0 a 999.9 decimal (4,2) cubre 00.00 a 99.99 decimal (4,3) cubre 0.000 a 9.999


Supongo que estás tratando de exprimir un número mayor que 99999.99 en tus campos decimales. Cambiarlo a (8,3) no va a hacer nada si es mayor que 99999.999 - necesita aumentar el número de dígitos antes del decimal. Puede hacer esto aumentando la precisión (que es el número total de dígitos antes y después del decimal). Puede dejar la escala igual a menos que necesite modificar la cantidad de decimales que desea almacenar. Pruebe con decimal(9,2) o decimal(10,2) o lo que sea.

Puede probar esto comentando el insert #temp y vea qué números le está dando la instrucción select y vea si son más grandes de lo que su columna puede manejar.