当 isedit != 1 时触发更新以防止更新
Trigger on update to prevent update when isedit != 1
我有一个 table:
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 中执行。
因此,当您执行更新时,它会删除您的原始行并将其保留在名称 'deleted' 的逻辑 table 下,并从名称 table 的逻辑 table 插入一个新行姓名 'inserted'.
通过这种方式,您可以从 table 'deleted' 中获取值并识别列的值 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
我有一个 table:
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 中执行。
因此,当您执行更新时,它会删除您的原始行并将其保留在名称 'deleted' 的逻辑 table 下,并从名称 table 的逻辑 table 插入一个新行姓名 'inserted'.
通过这种方式,您可以从 table 'deleted' 中获取值并识别列的值 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