sql急。。。。。

chenplove 2012-09-12 02:51:01
请各位高手再帮我改下这个错误帮忙写出改法:谢谢!

错误提示:
Msg 8152, Level 16, State 13, Procedure sp_DeptYearPayAnlysise, Line 40
将截断字符串或二进制数据。
语句已终止。

代码如下:

--年度部门工资分析表
alter proc sp_DeptYearPayAnlysise @YYMM_FR CHAR(6),
@YYMM_TO CHAR(6)

AS
/*
create by :
create dt:
remark :exec sp_DeptYearPayAnlysise '201201','201209'
*/
SET NOCOUNT ON


CREATE table #Temp(YYMM CHAR(6),
PartID NVARCHAR(10),
dtName nvarchar(25),
per_count float DEFAULT(0),--总人数
pay_count float DEFAULT(0),--总工资
day_count float DEFAULT(0),--总天数
day_mtper float DEFAULT(0),--月平均出勤天数
pay_mtper float DEFAULT(0),--月平均工资
pay_dayper float DEFAULT(0),--日平均工资
persent float DEFAULT(0),--当月工资占全厂比率
total_month float default(0),
id int
)

select a.yymm,a.empno,b.PartID,t.dtName,p.WorkTime,a.incomeTaxBefor,a.DelCount,a.PayCount
into #MonthData
from PayMonthData a,peremployee b,PerDepart t,AttMonthData p
where a.empid =b.empid and b.partid = t.dtID and a.empid = p.empid and a.yymm=p.yymm
and a.yymm between @YYMM_FR AND @YYMM_TO


INSERT INTO #Temp(YYMM,PartID,dtName,per_count,pay_count,day_count,total_month)
SELECT YYMM,PartID,dtName,SUM(1),SUM(incomeTaxBefor),SUM(WorkTime)/8.0,(select sum(incomeTaxBefor) from PayMonthData where yymm = #MonthData.yymm)
FROM #MonthData
GROUP BY YYMM,PartID,dtName

update #Temp set day_mtper = round(day_count*1.00/(case when per_count>0 then per_count else 1 end),2),
pay_mtper = round(pay_count*1.00/(case when per_count>0 then per_count else 1 end),2),
pay_dayper= round(pay_count*1.00/(case when day_count>0 then day_count else 1 end),2)

update #Temp set persent = round(pay_count*1.00/(case when total_month>0 then total_month else 1 end),2)
where total_month >0

SELECT * FROM #Temp



...全文
86 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kingofcode 2012-09-12
  • 打赏
  • 举报
回复
凡是提示这个的 “将截断字符串或二进制数据”都是因为字段长度引起的
以学习为目的 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

你把这里这样写:

--INSERT INTO #Temp(YYMM,PartID,dtName,per_count,pay_count,day_count,total_month)
SELECT YYMM,PartID,dtName,SUM(1),SUM(incomeTaxBefor),SUM(WorkTime)/8.0,(select sum(incomeTaxBefor) fr……
[/Quote]
你有字段长度不够,字段值超出字段的限定长度,才会提示将截断字符串或二进制数据
發糞塗牆 2012-09-12
  • 打赏
  • 举报
回复
你把这里这样写:

--INSERT INTO #Temp(YYMM,PartID,dtName,per_count,pay_count,day_count,total_month)
SELECT YYMM,PartID,dtName,SUM(1),SUM(incomeTaxBefor),SUM(WorkTime)/8.0,(select sum(incomeTaxBefor) from PayMonthData where yymm = #MonthData.yymm)
FROM #MonthData
GROUP BY YYMM,PartID,dtName
然后看看出来的结果和你的#temp哪个字段太长了。
wr4719 2012-09-12
  • 打赏
  • 举报
回复
字段類型問題,你這裡面很多乘除的,具體的自己看第40行涉及到哪些字段,一個一個排查
跟着乐于分享的数据库大师梁敬彬抓住表象背后的SQL本质 有人就有江湖,有江湖就有IT系统,有IT系统就有数据库,有数据库就有SQLSQL应用可一字概括:“广”。加之其简单易学,SQL实现也可一字概括:“乐”。, 然而,SQL虽然实现简单可乐,却极易引发性能问题,那时广大SQL使用人员可要“愁”就一个字,心碎无数次了。, 缘何有性能问题?原因也一字概括:“量”。当系统数据量、并发访问量上去后,不良SQL就会拖跨整个系统,我们甚至找不出哪些SQL影响了系统。即便找到也不知如何动手优化。此时的心情也可以一字概括:“懵”。, 现在《收获,不止SQL优化——抓住SQL的本质》开始带你抛除烦恼,走进优化的可乐世界!, 首先教你SQL整体优化、快速优化实施、如何读懂执行计划、如何左右执行计划这四大必杀招。整这些干嘛呢?答案是,传授一个先整体后局部的宏观解决思路,走进“道”的世界。, 接下来带领大家飞翔在“术”的天空。教你体系结构、逻辑结构、表设计、索引设计、表连接这五大要领。这么多套路,这又是要干嘛?别,这是教你如何解决问题,准确地说,是如何不改写即完成SQL优化。, 随后《收获,不止SQL优化——抓住SQL的本质》指引大家学会等价改写、过程包
编辑推荐 方法意识巧妙融入,脑图表格清晰展现; 海量案例完美结合,线上线下拓展延伸。 内容简介 有人就有江湖,有江湖就有IT系统,有IT系统就有数据库,有数据库就有SQLSQL应用可一字概括:“广”。加之其简单易学,SQL实现也可一字概括:“乐”。 然而,SQL虽然实现简单可乐,却极易引发性能问题,那时广大SQL使用人员可要“愁”就一个字,心碎无数次了。 缘何有性能问题?原因也一字概括:“量”。当系统数据量、并发访问量上去后,不良SQL就会拖跨整个系统,我们甚至找不出哪些SQL影响了系统。即便找到也不知如何动手优化。此时的心情也可以一字概括:“懵”。 现在《收获,不止SQL优化——抓住SQL的本质》开始带你抛除烦恼,走进优化的可乐世界! 首先教你SQL整体优化、快速优化实施、如何读懂执行计划、如何左右执行计划这四大必杀招。整这些干嘛呢?答案是,传授一个先整体后局部的宏观解决思路,走进“道”的世界。 接下来带领大家飞翔在“术”的天空。教你体系结构、逻辑结构、表设计、索引设计、表连接这五大要领。这么多套路,这又是要干嘛?别,这是教你如何解决问题,准确地说,是如何不改写即完成SQL优化。 随后《收获,不止SQL优化——抓住SQL的本质》指引大家学会等价改写、过程包优化、高级SQL、分析函数、需求优化这些相关的五大神功。有点头晕,能否少一点套路?淡定,这还是“术”的范畴,依然是教你如何解决问题,只不过这次是如何改写SQL完成优化。 最后一个章节没套路了,其中跟随你多年的错误认识是否让你怀疑人生,其中让SQL跑得更慢的观点,是否让你三观尽毁? 再多一点真诚吧,《收获,不止SQL优化——抓住SQL的本质》提供扫二维码辅助学习,是不是心被笔者给暖到了? 读完全书,来,合上书本,闭上眼睛,深呼吸,用心来感受SQL优化的世界。 一个字:“爽”! 京东购买连接:https://item.jd.com/12191576.html

34,571

社区成员

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

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