我想做一个触发器,功能是在修改关系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 的列时发生语法错误。
哪位高手帮我看看哪里错了。
主要是怎么比较(更新的数据)与(原来的数据)
展开
 我来答
chuxue1342
2011-03-01 · TA获得超过747个赞
知道小有建树答主
回答量:414
采纳率:0%
帮助的人:394万
展开全部
你这个只是字段类型与你输入的字符串不同而已报的错!如
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?都不带条件的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式