日期:2014-05-18 浏览次数:20675 次
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
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)