sql 触发器 if

customer表中有一列integral,我想当integral列大于50小于200时,lev为1,integral大于200小于500时,lev为2,大于500时le... customer表中有一列integral,我想当integral列大于50小于200时,lev为1,integral大于200小于500时,lev为2,大于500时lev为3
我编了一个触发器,可是总提示出错,我把我的源码提供出来,希望万能的百度帮我解决
create trigger lev
on customer
for update
as
if integral>50 and integral<200
begin
update customer
set lev=1
end

else if integral>200 and integral<500
begin
update customer
set lev=2
end

else integral>500
begin
update customer
set lev=3
end
这是SQL的,只更新一个表,请 wangzhiqing999详解下
展开
 我来答
wangzhiqing999
推荐于2018-03-30 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3373万
展开全部
不知道是 Oracle 还是 SQL Server

如果是 Oracle , 基本上是用 fei07100107 那种的用法

如果是 SQL Server

那么需要定义几个变量。

create trigger lev
on customer
for update
as
DECLARE
@NewIntegral INT;
BEGIN

-- 取得 本次 更新的 integral
-- 如果一条语句,更新很多条记录的,这里要用游标处理。

SELECT @NewIntegral = integral FROM INSERTED

-- 如果这里不是更新全部表的,
-- 那么麻烦上面再多定义一个 变量,
-- 从 INSERTED 里面,取得 主键, 下面这里加 WHERE 条件。
if @NewIntegral>50 and @NewIntegral<200
begin
update customer
set lev=1
end

else if @NewIntegral>200 and @NewIntegral<500
begin
update customer
set lev=2
end

else @NewIntegral>500
begin
update customer
set lev=3
end
END
fei07100107
2010-10-03 · TA获得超过142个赞
知道答主
回答量:95
采纳率:0%
帮助的人:0
展开全部
你这错的地方也太多了
1.create trigger lev on customer for update 这样写:
create trigger lev after update on customer
2.if else 语句也不对,else if 不能分开,应该写为 elsif
3.update customer set lev=2没写where语句,这样不就把数据库都更新了一遍,应该加上一个where来区分每一条记录。
4.看一下触发器里面 关于 new和old关键字的用法,很好用的。

看一下下面这个示例:
create or replace trigger tr_save_change
after insert or update or delete on a
for each row
begin
case when inserting then
insert into b(id,name,update_date,flag)
values(:new.id,:new.name,sysdate,0);
when updating then
update b set name=:new.name,update_date=sysdate,flag=1 where id=:old.id;
when deleting then
delete from b where id=:old.id;
end case;
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ytu_math
2010-10-03 · TA获得超过1558个赞
知道小有建树答主
回答量:784
采纳率:100%
帮助的人:806万
展开全部
将update customer 删除即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e89d670f9
2010-10-04 · TA获得超过148个赞
知道小有建树答主
回答量:179
采纳率:0%
帮助的人:115万
展开全部
create trigger lev
on customer
for update
as
if update(integral)
begin
update customer
set lev=1 from customer c,inserted i where c.主键=i.主键 and i.integral>50 and i.integral<=200

update customer
set lev=2 from customer c,inserted i where c.主键=i.主键 and i.integral>200 and i.integral<=500

update customer
set lev=3 from customer c,inserted i where c.主键=i.主键 and i.integral>500
end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式