+ -
当前位置:首页 → 问答吧 → 触发器无法实现计算功能

触发器无法实现计算功能

时间:2011-12-20

来源:互联网

for insert 
as 
declare @著作得分 float 
declare @参加人数 int 
declare @分工 char(50) 
declare @书籍编号 char(10) 
set @书籍编号=(select 书籍编号 from inserted )
set @著作得分=(select 著作得分 from 著作 where 著作.书籍编号=@书籍编号) 
set @参加人数=(select 参加人数 from 著作 where 著作.书籍编号=@书籍编号) 
set @分工=( select 分工 from inserted) 
if @参加人数=1 
begin 
update 创作 
set 著作个人得分=@著作得分 where 书籍编号=@书籍编号 
end 
Else if @参加人数=2 and @分工='A'
begin 
update 创作 
set 著作个人得分= @著作得分*0.7 where 书籍编号=@书籍编号 
End 
Else if @参加人数=2 and @分工='B'
begin 
update 创作 
set 著作个人得分= @著作得分*0.3 where 书籍编号=@书籍编号
End 
Else if @参加人数=3 and @分工='A' 
begin 
update 创作 
set 著作个人得分= @著作得分*0.6 where 书籍编号=@书籍编号
end 
Else if @参加人数=3 and @分工='B' 
begin 
update 创作 
set 著作个人得分= @著作得分*0.2 where 书籍编号=@书籍编号
end 
Else if @参加人数=3 and @分工='C' 
begin 
update 创作 
set 著作个人得分= @著作得分*0.2 where 书籍编号=@书籍编号
end 
Else if @参加人数=4 and @分工='A' 
begin 
update 创作 
set 著作个人得分= @著作得分*0.4 where 书籍编号=@书籍编号
end 
Else if @参加人数=4 and @分工='B' 
begin 
update 创作
set 著作个人得分= @著作得分*0.2 where 书籍编号=@书籍编号
end 
Else if @参加人数=4 and @分工='C'
begin 
update 创作 
set 著作个人得分= @著作得分*0.2 where 书籍编号=@书籍编号
end 
Else if @参加人数=4 and @分工='D' 
begin 
update 创作 
set 著作个人得分= @著作得分*0.2 where 书籍编号=@书籍编号
end 

插入数据后 著作个人得分列没有内容

作者: shuizhongluohua   发布时间: 2011-12-20

insert into 创作(员工编号,书籍编号,姓名,书名,分工)
values ('X00003','zhu20110001','刘','辩论技巧','A')

作者: shuizhongluohua   发布时间: 2011-12-20

这个 是在做什么哦?

作者: fredrickhu   发布时间: 2011-12-20

这么多if,改为case,没数据可能是判断的问题

作者: ssp2009   发布时间: 2011-12-20

楼主写的有点乱!

作者: cr75608859   发布时间: 2011-12-20

就是根据写书的人数计算个人得分 在插入数据时 个人得分的列 没有结果 是空值

作者: shuizhongluohua   发布时间: 2011-12-20

SQL code

declare @书籍编号 char(10) 


這一句有問題吧, char(10)不夠吧~

作者: sjcss   发布时间: 2011-12-20

改成50 也不行 还是没有结果

作者: shuizhongluohua   发布时间: 2011-12-20

@著作得分 是不是本身就没有取到值呀

作者: zhaowenzhong   发布时间: 2011-12-20

可以试着给@著作得分 赋个初始值,看 个人得分列是否为 初始值*?的结果,如果是 则@著作得分 就没有得到值。

作者: zhaowenzhong   发布时间: 2011-12-20

这哪是在写TRIGGER哟,这是在写前端程序啊。

作者: yanyuchonglou   发布时间: 2011-12-20

引用 7 楼 shuizhongluohua 的回复:

改成50 也不行 还是没有结果

改成varchar(50)
@分工 char(50) 也改成varchar(50)
试一下

作者: sjcss   发布时间: 2011-12-20