当isedit !=1时,在更新时触发,防止更新。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当isedit !=1时,在更新时触发,防止更新。相关的知识,希望对你有一定的参考价值。
我有一个表。
ID NAME isedit
1 jon 0
2 smit 1
3 eve 0
我需要创建一个触发器,以防止该行被更新,当。isedit
不是1。
然而,它必须允许我设置 isedit
首先,例如
update base SET isedit = 0 WHERE id = @id
我试过下面的方法。
CREATE TRIGGER dbo.onupdate
ON base
AFTER UPDATE
AS
BEGIN
If (SELECT isedit FROM base) NOT LIKE '1'
Begin
Return
END
END
但我觉得没什么意义.
答案
- 使用基于集合的逻辑,考虑到
Inserted
可以有多条(或零条)记录。 - 使用
rollback
来撤销无效的更新。 - 允许您设置和清除
isedit
因为你以单列更新的方式更新它,你可以使用update(column)
函数来测试该列的变化并允许其通过。
create trigger dbo.onupdate
on base
after update
as
begin
set nocount on;
if not update(isedit) and exists (
select 1
from Inserted I
where isedit != 1
) begin
rollback;
end;
end
另一答案
请试试这个逻辑。当你试图更新一些东西的时候,在SQL中基本上会执行插入和删除操作。
因此,当你执行更新时,它会删除你的原始记录,并将其保存在名为 "删除 "的逻辑表下,并从名为 "插入 "的逻辑表中插入一条新的记录。
通过这种方式,你可以从表'删除'中获取值,并确定列的值isEdit !=1,那么它将抛出一个错误与回滚事务。
Create TRIGGER [dbo].onupdate
ON [dbo].base
FOR UPDATE
AS
IF EXISTS(SELECT NULL FROM deleted where isEdit <> 1)
BEGIN
RAISERROR('You can not update when isEdit value is 1', 16, 1)
ROLLBACK TRAN
END
以上是关于当isedit !=1时,在更新时触发,防止更新。的主要内容,如果未能解决你的问题,请参考以下文章