sqlserver算术溢出错误

cfghfgskrte 2017-06-01 03:28:07
新建临时表时,通过as对变量赋值为0.00,但是为什么更新为1.00时出错。
select 0.00 as amt into #temp from temp
update #temp set amt = 1.01

消息 8115,级别 16,状态 8,第 2 行
将 numeric 转换为数据类型 numeric 时出现算术溢出错误。

语句已终止。
...全文
1068 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2017-06-01
  • 打赏
  • 举报
回复
楼主可以用这个看一下临时表的表结构
USE [tempdb]
GO

SELECT a.name ,
CASE a.precision
WHEN 0
THEN CASE a.is_ansi_padded
WHEN 1
THEN CONVERT(NVARCHAR(15), b.name + '('
+ CONVERT(NVARCHAR(10), a.max_length) + ')') --字符
WHEN 0
THEN b.name + '(' + CONVERT(NVARCHAR(10), a.max_length) + ')' --字符
END
ELSE CASE a.scale
WHEN 0 THEN b.name --整形
ELSE b.name + '(' + CONVERT(NVARCHAR(10), a.precision) + ','
+ CONVERT(NVARCHAR(10), a.scale) + ')' --实数
END
END AS typelength
FROM sys.columns a
LEFT JOIN sys.types b ON a.system_type_id = b.system_type_id
AND a.user_type_id = b.user_type_id
WHERE a.object_id = ( SELECT TOP 1
object_id
FROM sys.objects
WHERE type = 'U'
AND name LIKE '%temp%'
);

GO


结果是这样的:


所以溢出了
cfghfgskrte 2017-06-01
  • 打赏
  • 举报
回复
引用 2 楼 cfghfgskrte 的回复:
能告诉下出现这种问题的原因吗?为什么使用as定义的时候会出现这种问题?
上面回复错了,三楼正解。
cfghfgskrte 2017-06-01
  • 打赏
  • 举报
回复
引用 2 楼 cfghfgskrte 的回复:
能告诉下出现这种问题的原因吗?为什么使用as定义的时候会出现这种问题?
太棒了 就是我要的结果!
顺势而为1 2017-06-01
  • 打赏
  • 举报
回复
引用 3 楼 wmxcn2000 的回复:
这个 amt 的类型为:[numeric](2, 2) 只能更新成 update tt set amt = 0.01 或 update tt set amt = 0.99
版主正解
cfghfgskrte 2017-06-01
  • 打赏
  • 举报
回复
能告诉下出现这种问题的原因吗?为什么使用as定义的时候会出现这种问题?
卖水果的net 2017-06-01
  • 打赏
  • 举报
回复
这个 amt 的类型为:[numeric](2, 2) 只能更新成 update tt set amt = 0.01 或 update tt set amt = 0.99
顺势而为1 2017-06-01
  • 打赏
  • 举报
回复
需要指定数据类型 select cast(0.00 as decimal(13,2)) as amt into #temp

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧