从数据类型 nvarchar 转换为 float 时出错
- SQL code
create procedure proc_HistoryGradeStandard/*参数*/( @total varchar(10) , --要处理的列 @searchTable varchar(50), --要查询的表 @uptotal varchar(10), --要更新的列 @UPTABLE varchar(50), --要更新的表 @grade varchar(50), --年级 @date varchar(50), --考试日期 @MONTH varchar(50) --考试月份)as DECLARE @totalAvg float --声明一条sql语句 declare @sqlTotal nvarchar(1000) set @sqlTotal='select @totalAvg=SUM('+@total+')/NULLIF(COUNT(1),0) from '+@searchTable+' where testdate=@date and grade=@grade' EXEC SP_EXECUTESQL @sqlTotal,N'@totalAvg float OUTPUT,@date datetime,@grade varchar(50)',@totalAvg OUTPUT,@date,@grade DECLARE @SIGN nvarchar(10) /*根据考试月份判断是期中还是期末成绩*/ IF( @MONTH='10') BEGIN set @SIGN=1 END IF( @MONTH='11') BEGIN set @SIGN=1 END IF(@MONTH= '12') BEGIN set @SIGN=2 END IF(@MONTH= '1') BEGIN set @SIGN=2 END IF( @MONTH='4') BEGIN set @SIGN=3 END IF( @MONTH='5') BEGIN set @SIGN=3 END IF( @MONTH='6') BEGIN set @SIGN=4 END IF( @MONTH='7') BEGIN set @SIGN=4 END declare @INSERTSCORE varchar(1000) [color=#FF0000]set @INSERTSCORE=N' INSERT INTO '+@UPTABLE+' (Grade, TestDate, Signs, '+@uptotal+',) values('+@grade+','+@date+','+@SIGN+','+Convert(float, @totalAvg)+')'[/color] EXEC SP_EXECUTESQL @INSERTSCORE运行到红字时就报“从数据类型 nvarchar 转换为 float 时出错”为什么呀?好像是@totalAvg不对。
[解决办法]
- SQL code
declare @INSERTSCORE varchar(1000) set @INSERTSCORE=N' INSERT INTO '+@UPTABLE+' (Grade, TestDate, Signs, '+@uptotal+',) values('+@grade+','+@date+','+@SIGN+',@totalAvg)' EXEC SP_EXECUTESQL @INSERTSCORE, N'@totalAvg float', @totalAvg
[解决办法]
INSERT INTO '+@UPTABLE+' (Grade, TestDate, Signs, '+@uptotal+',)
======================
多个逗号吧
[解决办法]
如楼上
[解决办法]
测试环境下,7楼的是通过的呀
[解决办法]
原始数据没问题吧?
[解决办法]
if 太多,能合并的合并
[解决办法]
declare @INSERTSCORE varchar(1000)
改成
Nvarchar(1000)