存储过程:用户进程中发生浮点异常错误.有很多电话在追着我,帮帮忙,分不够再给!

chenooo 2002-07-24 10:30:40
以下是我的一个存储过程里的语句,可总是出以上错误,如不 insert into #temp03
就不会出错,这可这么办,无数电话在追着我,各路高手帮帮忙,这里先谢了!

Select a.Job_No,a.KN_Plan_Finish_Date,a.Usage,a.Raw_No,a.GK_No,a.Kn_Plan_Outer_Qty,
a.Order_Qty,d.Usage_Type,e.color_code,
Case d.Usage_Type when 'C' then Round(KN_Plan_Inner_Qty,0) else
Convert(decimal(10,2),0.00) END as Require_Produce_Qty ,
Convert(decimal(10,2),0.00) as Plan_Produce_Qty,
Case d.Usage_Type when 'C' then Round(isnull(Raw_Reserved_Qty,0),0) else
Convert(decimal(10,2),0.00) END as Fabric_Reserved_Qty,
e.Ry_Qty,e.Yarn_Type,e.Yarn_Count,e.Yarn_Lot,e.Job_Item_Id,
[dbo].[Udf_GetOverseaByYarnLot](e.[Job_Item_ID]) as OverSea,
f.Customer,f.Follower,
Convert(decimal(10,2),0.00) as Fact_Ry_Qty,-- 此字段写入实际配纱量
Convert(decimal(10,2),0.00) as Fact_Dy_Qty,-- 此字段写入色纱留位量
Convert(varchar(4000),space(20)) as Ppo_No,
systemdb.dbo.UDF_GetSizeInfo(c.cc_Width,c.cc_Width_Part,c.cc_Height,c.cc_Height_Part,c.Unit) as size
into #temp03
from pcArrangeMain a
left join ArtDB..rtRawInfo c on a.Raw_No=c.Raw_No
left join SystemDB..pbUsageList d on a.Usage=d.Usage
left join pcArrangeDetail e on a.Job_Id=e.Job_Id
Left join SystemDB..pbCustomerList f on a.Customer=f.Customer_Code
-- left Join pcPpoLot f on a.Job_No=f.Job_No
-- inner join pcPpoItem g on
where a.Job_No='SP026582' and a.Confirmed<>'C'
order by a.KN_Plan_Finish_Date


select * from #temp03
drop table #temp03
...全文
224 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccnh 2002-08-16
  • 打赏
  • 举报
回复
这个无比丑陋的方法还是我提供的,快散分!!!!!
chenooo 2002-07-29
  • 打赏
  • 举报
回复
所有方法都试了,都不行,最后小生用了一个无比丑陋的办法,用一个Query先执行没有Insert into 的语句,再执行存储过程,它就不出错了,为什么我还是不知道???
zqllyh 2002-07-28
  • 打赏
  • 举报
回复
试试把数值型的全部转成float 看看
N_chow 2002-07-27
  • 打赏
  • 举报
回复
沒看出問題。
若是不加 INTO #temp03則不會出現錯誤,那你可先試試:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1、Exec sp_configure 'User option',128
RECONFIGURE WITH OVERRIDE

若還是不行,則打上最新的補丁再試試。
老乐 2002-07-27
  • 打赏
  • 举报
回复
[dbo].[Udf_GetOverseaByYarnLot](e.[Job_Item_ID]) as OverSea

([dbo].[Udf_GetOverseaByYarnLot](cast(e.[Job_Item_ID] as int )) as varchar(10))as OverSea
看看。不行的话:将两的函数的内容删除(先去内层的),只写return 'sfasfd'试试
问题到底出在什么地方!
chenooo 2002-07-26
  • 打赏
  • 举报
回复
update :
函数中再调用的函数是:

--找国内国外纱
CREATE FUNCTION [dbo].[udf_GetYarnOverSea]
(@Yarn_Type varchar(20),@Yarn_Count varchar(30),
@Yarn_Lot varchar(40),@Color_Code varchar(40))
RETURNS varchar(5)
AS
BEGIN
declare @OverSea varchar(5)
select @OverSea=a.OverSea
from ( select distinct OverSea
from YarnStoreDB..YarnIn
where Yarn_Type=@Yarn_Type and Yarn_Count=@Yarn_Count
and Yarn_Lot=@Yarn_Lot and Color_Code=@Color_Code) a
-- 如为Null 则当国内纱 ='N'
Return IsNull(@OverSea,'N')
END

chenooo 2002-07-26
  • 打赏
  • 举报
回复
N_chow(一劍飄香) ,先谢谢了,就靠你了!

第11行就是
 [dbo].[Udf_GetOverseaByYarnLot](e.[Job_Item_ID]) as OverSea

此函数并没有涉及到浮点运算啊,且没有 insert into #temp这句话时也不出错?

以下是此函数的内容:
 CREATE FUNCTION [dbo].[Udf_GetOverseaByYarnLot]
(
@Job_Item_Id int
)
RETURNS varchar(10)
AS
BEGIN
declare @Oversea varchar(10)
declare @Seastr varchar(3000)
set @Seastr=''
select @Seastr=@Seastr+[dbo].[udf_GetYarnOverSea](Yarn_Type,Yarn_Count,Yarn_Lot,Color_Code)
from YarnStoredb..Yarntotalstore with(nolock)
where iden in
(
select distinct Virtual_Iden from pcRyreserve with(nolock) where Job_Item_Iden=@Job_Item_id and status<>'C'
)

if @Seastr<>''
begin
if charindex('Y',@Seastr)>0 set @Oversea='Y' else set @Oversea='N'
end
else
begin
set @Seastr=''
select @Seastr=@Seastr+[dbo].[udf_GetYarnOverSea](Yarn_Type,Yarn_Count,Yarn_Lot,Color_Code)
from YarnStoredb..Yarntotalstore with(nolock)
where iden in
(
select distinct Virtual_Iden from pcDyreserve with(nolock) where Job_Item_Id=@Job_Item_id and status<>'C'
)

if @Seastr='' set @Oversea='NIL'
else
if charindex('Y',@Seastr)=0 set @Oversea='N' else set @Oversea='Y'
end

return @Oversea
END


中间还调用了以下函数:

CREATE FUNCTION [dbo].[Udf_GetOverSea] (@Job_No varchar(15),@GK_No varchar(30))
RETURNS varchar(5)
AS
BEGIN
declare @Over_Sea varchar(5)
declare @SeaStr varchar(3000)
set @SeaStr=''

declare @ItemStr varchar(8000)
set @ItemStr=''
select @ItemStr=@ItemStr+rtrim(convert(varchar(10),Job_Item_Id))+',' from pcArrangeDetail with(nolock) where JOb_no=@Job_No and gk_no=@gk_No

select @SeaStr=@SeaStr+[dbo].[Udf_GetYarnOverSea](Yarn_Type,Yarn_Count,Yarn_Lot,Color_Code)
from Yarnstoredb..Yarntotalstore
where Iden in
(select distinct virtual_iden from pcRyReserve a with(nolock),systemdb.dbo.udf_convertstrtotable(@ItemStr) b
where Job_Item_Iden = b.no and a.status<>'C')

if charindex('Y',@SeaStr)>0
begin
set @Over_Sea='Y'
end
else
begin
select @SeaStr=@SeaStr+[dbo].[Udf_GetYarnOverSea](Yarn_Type,Yarn_Count,Yarn_Lot,Color_Code)
from Yarnstoredb..Yarntotalstore
where Iden in
(select distinct virtual_iden from pcDyReserve a with(nolock),systemdb.dbo.udf_convertstrtotable(@ItemStr) b
where Job_Item_Id = b.no and a.status<>'C')

if charindex('Y',@SeaStr)=0
set @Over_Sea='N'
else set @Over_Sea='Y'
end
Return @Over_Sea
END


newly_ignorant 2002-07-26
  • 打赏
  • 举报
回复
建议先删除自定义函数测试
N_chow 2002-07-26
  • 打赏
  • 举报
回复
果然是Udf_GetOverseaByYarnLot這個Function出錯了,不是此語句的錯。
請把Udf_GetOverseaByYarnLot 里的第11行帖出來,或者把全部代碼都帖出來,我幫你看看。
chenooo 2002-07-26
  • 打赏
  • 举报
回复
错误信息(SQL Server 2000):
服务器: 消息 3628,级别 16,状态 1,过程 Udf_GetOverseaByYarnLot,行 11
用户进程中发生浮点异常错误。已取消当前事务。

但 函数 Udf_GetOverseaByYarnLot 单独执行是没有问题。
数据也没有超限.

Yang_(扬帆破浪) : 加入Convert()也还是一样错误,我把那几个字段封掉也还是有同样错误。

我真是头痛死了,各路高手,Help me!(解决了按需给分 !)

UP
N_chow 2002-07-24
  • 打赏
  • 举报
回复
SQL Serer的版本??
詳細的錯誤訊息是什麼??
N_chow 2002-07-24
  • 打赏
  • 举报
回复
SQL Serer的版本??
詳細的錯誤訊息是什麼??
N_chow 2002-07-24
  • 打赏
  • 举报
回复
SQL Serer的版本??
詳細的錯誤訊息是什麼??
newly_ignorant 2002-07-24
  • 打赏
  • 举报
回复
UP
Round函数只是四舍五入,并不改变数据长度
比如
SELECT ROUND(123.4545, 2)
结果为123.4500

因此需要转换
Yang_ 2002-07-24
  • 打赏
  • 举报
回复
updated:
如:
Convert(decimal(10,2),(Case d.Usage_Type when 'C' then Round(KN_Plan_Inner_Qty,0) else
0 END)) as Require_Produce_Qty ,
Yang_ 2002-07-24
  • 打赏
  • 举报
回复
updated:
如:
Convert(decimal(10,2),(Case d.Usage_Type when 'C' then Round(KN_Plan_Inner_Qty,0) else
0 END)) as Require_Produce_Qty ,
Yang_ 2002-07-24
  • 打赏
  • 举报
回复
把那几个case when产生的字段用convert转换一下:
如:
Convert(decimal(10,2),(Case d.Usage_Type when 'C' then Round(KN_Plan_Inner_Qty,0) else
0 END) as Require_Produce_Qty ,

leimin 2002-07-24
  • 打赏
  • 举报
回复
Case d.Usage_Type when 'C' then Round(KN_Plan_Inner_Qty,0) else

Case d.Usage_Type when 'C' then Round(isnull(KN_Plan_Inner_Qty,0),0) else
warp1977 2002-07-24
  • 打赏
  • 举报
回复
拿详细的出错讯息来
OpenVMS 2002-07-24
  • 打赏
  • 举报
回复
是不是数据超限?把你的字段的定义长度加大
检查Udf_GetOverseaByYarnLot函数是不是有什么问题?
 OpenGL-自主高性能三维GIS平台架构与实现/第二季:实现三维GIS球体+ 高程数据章节名称DEM基础1DEM基础知识1.介绍基本的DEM知识2.什么是DEM,作用是什么2DEM数据1.如何获取/ 传统测量/激光扫描/无人机测量/ 点云数据/ 倾斜摄影2.如何使用/局部小规模(栅格数据,图片/tif),3. 组织方式4. 根据使用目的不同,介绍多种优化方法3DEM图层的实现原理14DEM数据结构定义struct  V3U3N4顶点数据的生成和计算WGS84投影计算5wgs84 投影球体被切成一个个小圆弧,一共60个投影带,别为01,02.........60WGS的最新版本为WGS 84(也称作WGS 1984、EPSG:4326),1984年定义、最后修订于2004年。接口定义坐标转换Wgs84 数据加载6瓦片编号计算生成算法1. 经纬度到大地坐标的转换2.大地坐标到经纬度坐标转换3. 根据经纬度获取瓦片编号框架重构7智能指针重构框架1. 基类定义(所有的类继承自基类),基类派生自 std::enbale_shared_from_this2. 实现智能指针的动态转换接口3. 实现向下转换4. 已有的类实现全部使用智能指针重构5. 任务系统(多线程加载任务)8引入图层(Layer)1. 介绍图层的概念以及重要性2. 图层类实现3. 修改框架(使用图层的方式重构框架)9Layer-bug排查(绘制过程出现错位,偶发)1. 框架重构后遇到问题(绘制结果错误)2. 瓦片索引方式发生变化,多线程引起内存问题3. 修改索引方式,解决绘制偶发错误问题10引入数据源(TileSource)1. 数据源的作用与设计目的2. 当前存在的问题,数据调度存在问题3. 数据源(TileSource)类实现11数据格式管理(FormatMgr)1. 数据格式管理(FormatMgr) 提出的目的,需要解决的问题2. CELLFormat基类接口抽象3. 实现几个标准格式类4. 修改框架流程,使用FormatMgr重构流程5. 扩展支持,后续支持任务格式数据加入系统12Task(任务)优化1. 任务低耦合数据结构,目的是让Task更加的通用2. 修改任务读取代码与任务处理代码,完善处理流程DEM高程13DEM-数字高程定义1. 什么是数字化高程数据2. 当下GIS系统有哪些常见的高程格式3. 课程体体系使用的哪种格式4. 高程类定义以及实现,并加入到FormatMgr 管理系统14高程瓦片数据读取1. 介绍GIS系统相关的工具(在数据转换)数据生成方面可以解决大量时间2. 自定义高程瓦片格式说明3. 自定义高程格式文件解析,并以智能对象的方式引入到系统4. 完善框架代码,适配高程数据15高程瓦片文件的读取1. 实现基本的读取算法2. 增加格式化组件,并加入到系统3. 配置高程图层以及高程数据源,并加载数据,验证数据正确性16瓦片数据结构重构1.顶点生成2.UV坐标计算3.面数据生成17DEM重构绘制流程1. 修改绘制数据结构,去除无用字段2. 增加Mesh类,实现光栅数据转换成三角面数据,计算UV数据,提炼接口3. 修改系统调度,实现顶点数据,UV数据,以及面数据的生成与更新4. 按需更新数据,而不是每一帧更新18DEM-数据精度问题(CPU)1. 因为瓦片数据使用大地坐标作为系统输入,造成瓦片坐标很大,单浮点数据精度不够2. 使用局部坐标的方式解决单浮点精度问题3. 调整相机参数,解决投影矩阵数据计算深度精度问题4. 修改绘制shader 实现对瓦片数据的绘制19DEM-数据精度问题(LogDepth)1. 使用对数深度(log depth )算法在GPU 计算解决单浮点经纬计算问题2. 修改shader ,增加对(logDepth)算法支持3. 修改C++端代码,实现对shader数据的输入20DEM-数据结构优化1.当下使用CPU端数据通过接口的方式传递给GPU,速度慢2. 使用Instance 方式降低Vertex Buffer 的大小,优化渲染系统21DEM-GPU缓冲区优化1. 使用Vertex Buffer Object / Index Buffer Object  / Instance  方式优化渲染系统2. 修改绘制接口,使用DrawElementsInstanceBaseInstance方式提升系统性能内存池与对象池22瓦片生成优化/对象池1. 相机移动过程会频繁的建立与释放瓦片,对CPU有较大的消耗2. 引入内存池,避免频繁的内存申请与释放,降低CPU时间3. 改造智能指针对象,对象释放通知到内存管理,回收对象内存23改造任务系统支持对象池1. 任务系统是一个公用模块,被多个模块使用,避免频繁的内存操作,引起的内存碎片2. 实现对象池,并应用到任务模块法线计算24法线计算1. 修改现有顶点结构,增加法线支持2. 修改shader,增加法线顶点输入,使用平行光光照模型3. 修改绘制流程,支持光照计算,使用探照灯作为光源输入25顶点法线计算/共享法线计算1. 增加数据结构保存顶点数据被多个面共享的次数2. 计算面法线,并累加到顶点法线3. 根据顶点被面共享的次数做平均法线计算4. 修改流程,按需更新法线数据26法线数据压缩1. 法线数据使用3 * float 数据存储,大大的增加了系统的数据2. 实现算法,将3 * float 数据压缩成4字节数据3. 改造绘制代码,支持压缩数据输入27GPU计算产生法线数据(去掉CPU计算)1. 引擎支持 Geometry Shader 阶段2. 编写 Geometry Shader,实现法线计算系统功能优化28重构CPU拾取流程1. 当下的拾取流程,只支撑二维数据拾取,无法准群的拾取三维数据2. Terrain增加拾取接口,输入射线,输出拾取到顶点数据29绘制拾取结果1. 增加一个绘制点的方法,实现绘制代码2. 修改shader,增加logdepth3. 调试代码,花费了很多时间排查错误,最总排查到是因为uniform参数笔误写错造成。30任务系统完善,避免任务队列无线膨胀1. 任务系统,没有限制队列的大小,生产者的能力远大于消费者的能力,造成任务队列膨胀2. 处理办法,限制生产者的生产能力,而不是限制任务队列大小(这种方式会造成业务逻辑异常复杂)3. 使用sleep休眠方式(这种方式是严重错误的)31如何避免瓦片数据抖动1. 产生瓦片抖动的原因 ? 裂算法与回退算法间没有过度2. 引入过度流程,避免内存抖动,参数因子是一个重要的数据,需要谨慎使用3. 有必要结合瓦片自身数据动态计算参数因子32瓦片数据管理-fepk文件格式支持-全球数据加载1. 支持fepk文件格式,增加fepk读取组件,适配fepk文件2. fepk管理数据方式:一般情况选择全球前10级别作为基础级别,因数据量不大(1G)左右,后续以8级作为基础级别,全球19级别数据被划为 2^8 * 2^7(512 * 256)个块。每个块包含了256 * 256 张小瓦片33fepk高程数据读取 34高程裂处理当瓦片没有高程数据,那么子节点以及其他后代节点该如何共享父节点的数据35lesson-734-高程瓦片裂处理(2)-算法实现高程数据裂算法实现实现对高程数据的切,并对特殊数据进行处理36高程瓦片裂处理(3)-问题排查 37高程瓦片裂处理(4)-(后代节点更新问题)当一个瓦片高程数据更新后,他的儿子节点,孙子节点...该如何处理?38瓦片视锥裁剪错误高程数据更新后,没有技术计算瓦片包围盒信息,造成包围盒错误,进而引视锥计算错误39http支持1.引入三方库 Libcurl2.http类封装,支持http读取数据40fepk.server使用 生成三维地球41改造四叉树-统一使用经纬度输入42地形网络生成算法重构 43引入球体坐标系 44使用球体坐标改造瓦片 45多图层(加载标签数据) 课时截图:镜头拉近后,显示细节数据加载矢量SHP国界线数据:加载矢量三维白膜数据截图高程数据加载点云数据 加载倾斜摄影数据 

34,590

社区成员

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

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