存储大于整数范围的值。您应该使用bigint数据类型我甚至不打算开始整理upI通过在线格式化程序丢弃您的SQL。但是仍然可以手动整理。为什么没有内置格式化程序选项?如果您正在侦听,Microsoft会显示错误消息“Msg 8115,16级,状态8,第1行算
存储大于整数范围的值。您应该使用bigint数据类型我甚至不打算开始整理upI通过在线格式化程序丢弃您的SQL。但是仍然可以手动整理。为什么没有内置格式化程序选项?如果您正在侦听,Microsoft会显示错误消息“Msg 8115,16级,状态8,第1行算,sql,sql-server-2008,Sql,Sql Server 2008,存储大于整数范围的值。您应该使用bigint数据类型我甚至不打算开始整理upI通过在线格式化程序丢弃您的SQL。但是仍然可以手动整理。为什么没有内置格式化程序选项?如果您正在侦听,Microsoft会显示错误消息“Msg 8115,16级,状态8,第1行算术溢出错误将数字转换为数据类型数字”。可以通过指示无法转换的原始值来改进。当加载一个包含1000亿行的表并试图了解哪个值有问题时,这将有很大帮助。添加SELECT的列号同样有用。例如,选择CAST(12345678910作为十进制数(12,0)
存储大于整数范围的值。您应该使用bigint数据类型我甚至不打算开始整理upI通过在线格式化程序丢弃您的SQL。但是仍然可以手动整理。为什么没有内置格式化程序选项?如果您正在侦听,Microsoft会显示错误消息“Msg 8115,16级,状态8,第1行算术溢出错误将数字转换为数据类型数字”。可以通过指示无法转换的原始值来改进。当加载一个包含1000亿行的表并试图了解哪个值有问题时,这将有很大帮助。添加SELECT的列号同样有用。例如,选择CAST(12345678910作为十进制数(12,0)),CAST(12345678910作为十进制数(12,2))…在错误消息中添加字符串:“Value:12345678910 Column:2”。我不必回答自动生成帐户的人提出的问题;他们不知道自己身在何处,一旦修好了就再也不会回来了@用户572984:你好!?有人在家吗?不,我不这么认为。我把小数点去掉了,所以它变大了。谢谢选中
数据库字段长度
等于,以DataTableAdapter
指定列的长度-存储过程的特定参数Length@OlaTuvesson幸运的是,尽管User572984很长,而且可能永远也看不到它,但截至今天(2020年10月8日),它已经被浏览了27万多次!因此,在向未知用户支付费用的过程中,它让多达270K的用户受益!通过提高精度并保持比例不变,可以增加小数点前的位数。因此,我所说的没有错,但我确实明白这会被误解。我这样说是因为OP最初只是试图通过增加规模来解决问题,但你是对的;需要提高的是总精度。哇!非常感谢你,伙计。。这个答案真的帮了我很大的忙。TRY_CAST接受一个表达式,其值为CAST。不仅仅是你所说的字符串。虽然这会允许例程无误地完成,但它将以丢失数据为代价。错误的目的是表明需要干预以防止数据丢失。只有在您真正不关心结果是否存在的情况下,您的解决方案才会起作用。OP表示所讨论的列是数值列,而不是整数列(如错误消息“算术溢出错误将数值转换为数据类型数值”所示),最上面的答案正确地解决了这一问题。您的答案正确地识别了问题(没有足够的空间存储结果),但没有达到问题的初衷。
Msg 8115, Level 16, State 8, Line 33
Arithmetic overflow error converting numeric to data type numeric.
The statement has been terminated.
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