sql如何取得触发器update前的值

就是有一个触发器要让update修改的int型数据每次修改幅度不能超过原来20%但我不知道怎么取得update之前的值还有updated表里是不是只会存储最近一个操作的数... 就是有一个触发器 要让update修改的int型数据每次修改幅度不能超过原来20%但我不知道怎么取得update之前的值 还有updated表里是不是只会存储最近一个操作的数据? 展开
 我来答
小小小小颦
高粉答主

2020-04-27 · 关注我不会让你失望
知道小有建树答主
回答量:3124
采纳率:100%
帮助的人:54.2万
展开全部

具体操作步骤如下:

1、首先,创建一个触发器,要求是在AddTable表上创建update触发器,如下图所示,然后进入下一步。

     

2、其次,触发器将触发,并显示:the table was updated,如下图所示,然后进入下一步。    

     

3、接着,对AddTable表中的数据执行更改操作,如下图所示,然后进入下一步。    

     

4、然后,完成上述步骤后,会发现触发了触发器并输出了设置的文本,如下图所示,然后进入下一步。    

     

5、随后,只需要更改create为alter,再修改逻辑,如下图所示,然后进入下一步。    

     

6、接着,如果要查看某个触发器的内容,请直接运行:exec
 sp_helptext (触发器名),如下图所示,然后进入下一步。    

     

7、最后,执行另一项测试以更改AddTable表,并发现触发update触发器后,由于数据保护,该触发器被中止,如下图所示。这样,问题就解决了。    

     

     

匿名用户
2018-01-03
展开全部

更新的动作你可以分2步理解,先delete ,再insert
所以,前的值在 deleted里
后的值在 inserted里

create trigger t_ATDATEState_update
on list
for update
as
if update(ATDATEState)
begin
declare @b_ATDATEState nvarchar(200)  --修改之前的
declare @S_ATDATEState nVARCHAR(200)  --修改之后的
declare @S_id INT

SELECT @S_ATDATEState= ATDATEState FROM INSERTED --从更新后的副本表(临时表)里面 获得要修改后的状态

select @S_id=id,@b_ATDATEState=ATDATEState from deleted  --从之前删掉的临时表里面获取原来的值

if @S_ATDATEState is null
begin
set @S_ATDATEState='0'
end
if @b_ATDATEState is null
begin
set @b_ATDATEState='0'
end
--如果修改前为2,3,4  降低了状态 向下修改  并且 修改后的状态和修改前不一样
if ((convert(int,@b_ATDATEState)>=2  and convert(int,@S_ATDATEState)<convert(int,@b_ATDATEState)) and (@b_ATDATEState<>@S_ATDATEState))
begin
insert into dbo.operate(c_id,before_ATDATEState,after_ATDATEState,o_ip,o_type)
values(@S_id,@b_ATDATEState,@S_ATDATEState,'','状态不正常,向下降低了')
end
if(convert(int,@b_ATDATEState)<2) and ( convert(int,@S_ATDATEState)>=2)
begin
insert into dbo.operate(c_id,before_ATDATEState,after_ATDATEState,o_ip,o_type)
values(@S_id,@b_ATDATEState,@S_ATDATEState,'','状态升高')
end
end

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-05-21
展开全部
select @inta=(你要的值) from inserted (Inserted 表 是更新前 数据的备份)if (@abcd-@inta) / @inta > 0.2 { 大于 20% 要做的事情 }else { 小余 20% 要做的事情 }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-05-21
展开全部
update是先delete,再insert比较inserted与deleted值就好了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式