我想做一个触发器,功能是在修改关系SC的成绩值时,要求修改后的成绩一定不能比原来的低,否则拒绝修改。
算法如下:altertriggersc_updateonSCafterupdateasbegindeclare@S#intdeclare@C#intdeclare@SCO...
算法如下:
alter trigger sc_update on SC
after update
as
begin
declare @S# int
declare @C# int
declare @SCORE INT
set @S#=(select S# from inserted)
set @C#=(select C# from inserted)
set @SCORE=(select SCORE from inserted)
if(@score>(select score from sc where SCORE>'@SCORE'))
update SC SET SCORE='@SCORE'
end
但是,我用下面这个语句检验时
update sc
set score=75
where c#='c2';
显示下面这个错误:
将 varchar 值 's7 ' 转换为数据类型为 int 的列时发生语法错误。
哪位高手帮我看看哪里错了。
主要是怎么比较(更新的数据)与(原来的数据) 展开
alter trigger sc_update on SC
after update
as
begin
declare @S# int
declare @C# int
declare @SCORE INT
set @S#=(select S# from inserted)
set @C#=(select C# from inserted)
set @SCORE=(select SCORE from inserted)
if(@score>(select score from sc where SCORE>'@SCORE'))
update SC SET SCORE='@SCORE'
end
但是,我用下面这个语句检验时
update sc
set score=75
where c#='c2';
显示下面这个错误:
将 varchar 值 's7 ' 转换为数据类型为 int 的列时发生语法错误。
哪位高手帮我看看哪里错了。
主要是怎么比较(更新的数据)与(原来的数据) 展开
展开全部
你这个只是字段类型与你输入的字符串不同而已报的错!如
S#,C#中存在s7
还有就是:
update SC SET SCORE=@SCORE
这里不用单引用啊
最后说一点.这么简单语句根本不用触发器:
Update sc set SCORE=@SCORE
where C#=@C# and SCORE<=@SCORE
就可以了
S#,C#中存在s7
还有就是:
update SC SET SCORE=@SCORE
这里不用单引用啊
最后说一点.这么简单语句根本不用触发器:
Update sc set SCORE=@SCORE
where C#=@C# and SCORE<=@SCORE
就可以了
追问
字段类型与你输入的字符串不同而已报的错,!!!??
那要怎么改,可以说清楚点吗?谢谢
追答
我不是已经帮你改好了吗?
alter trigger sc_update on SC
after update
as
begin
declare @S# int
declare @C# int
declare @SCORE INT
set @S#=(select S# from inserted) --确保S#是int
set @C#=(select C# from inserted) --确保C#是int
set @SCORE=(select SCORE from inserted)
--刚刚没注意,你这个查询条件太扯了吧
--select score from sc where SCORE>@SCORE查询分数大于原来分数的分数?
--条件是不是写错了,应该是:select score from sc where ID=多少这样吧
if(@score>(select score from sc where SCORE>@SCORE))
update SC SET SCORE=@SCORE --确保这两个值的类型一样,而且你要把整表的分数都更新为@SCORE?都不带条件的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询