救助 "用户进程中发生浮点异常错误" 的解决方法

normandj 2007-11-05 08:44:02
不知什么时候,有几个存储过程一运行就发生错误,提示:

“服务器: 消息 3628,级别 16,状态 1,过程 Pro_考勤月统计,行 8
用户进程中发生浮点异常错误。已取消当前事务。”

但一样存储过程在备份的数据库里却没有问题,请问如何解决,或提示解决问题的思路。
...全文
193 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
normandj 2007-11-05
  • 打赏
  • 举报
回复
解决了,数据有损坏。

--用下面的语句,检查/修复数据库/并整理索引碎片(需要比较长的时间,请在系统空闲时进行此工作)

USE MASTER
GO

sp_dboption '你的数据库名', 'single user', 'true'
Go

DBCC CHECKDB('你的数据库名', REPAIR_ALLOW_DATA_LOSS)
Go

USE 你的数据库名
go

exec sp_msforeachtable 'DBCC CHECKTABLE(''?'',REPAIR_ALLOW_DATA_LOSS)'
exec sp_msforeachtable 'DBCC DBREINDEX(''?'')'
go

sp_dboption '你的数据库名', 'single user', 'false'
Go
chuifengde 2007-11-05
  • 打赏
  • 举报
回复
把decimal中的4增大些试试
normandj 2007-11-05
  • 打赏
  • 举报
回复
代码:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

ALTER procedure dbo.Pro_考勤月统计
--参数
@机构 varchar(20) = '南宁所',
@部门 varchar(20) = '审计部',
@年份 char(4)='2004',
@月份 varchar(2) ='1'
as
select 机构,部门,姓名,
在所坐班 =convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='1')),
本市进点 =convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='2')),
出差 = convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='3')),
病假 =convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='4')),
事假 =convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='5')),
年休假 =convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='6')),
产假 =convert(decimal(4,1),( select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='7')),
哺乳假 =convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='8')),
婚假 = convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='9')),
丧假 = convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='10')),
探亲假 = convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='11')),
旅游假 = convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='12')),
旷工 = convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='13')),
迟到 = convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='14')),
早退 = convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 ='15')),
总出勤 = convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 between '1' and '3' )),
各种假期 = convert(decimal(4,1),(select count(*)/2.0 from vw_所有考勤表 where 姓名 = a.姓名 and month(日期) = @月份 and year(日期)=@年份 and 类型 between '4' and '15' ))
from worker as a
where 机构=@机构 and 部门=@部门
order by 机构,部门,姓名

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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