删除行时,SQL 触发器中的 UPDATED() 函数是不是返回 true?

Posted

技术标签:

【中文标题】删除行时,SQL 触发器中的 UPDATED() 函数是不是返回 true?【英文标题】:Does UPDATED() function in SQL trigger return true when rows are deleted?删除行时,SQL 触发器中的 UPDATED() 函数是否返回 true? 【发布时间】:2015-03-26 18:21:42 【问题描述】:

当您对带有触发器的表运行DELETE 语句时,在该触发器中UPDATE( colName ) 函数是否会返回true?

【问题讨论】:

【参考方案1】:

没有。 UPDATE(colName) 仅对 INSERT 和 UPDATE 返回 TRUE

set nocount on
go
create table test ( cola nvarchar(10), colB int default(0) ) 
go 
create trigger tr_test on test for insert,update,delete
as
begin 
    select case when update(cola) then 'yes' else 'no' end as ColA_Updated, 
           case when update(colb) then 'yes' else 'no' end as ColB_Updated
end 
go 

-- This outputs 'yes', 'yes'
insert into test (cola) values ( 'a' ) 

-- This outputs 'yes', 'no'
update test set cola = 'b' 

-- This outputs 'no', 'no'
delete from test where 1=0

-- This outputs 'no', 'no'
delete from test 

go
drop trigger tr_test
drop table test
go 

【讨论】:

以上是关于删除行时,SQL 触发器中的 UPDATED() 函数是不是返回 true?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sql server 执行 BEFORE UPDATED 触发器?

ORACLE 和触发器(插入、更新、删除)

当其他表上没有更多行时,SQL 删除行

如何在 SQL Server 触发器中复制插入、更新、删除的行

sql 从源表中删除行时,删除$ TA表中的相应行

MS SQL Server COLUMNS_UPDATED() 函数