日期:2014-05-18  浏览次数:20461 次

在触发器中 if upfdte()可以判断某张表的某一列被更新了吗?
我想判断a(a 表是另外的表,不是我要更改的表哟)表的m列,如果m列的值为0,则执行下面的更改。

------解决方案--------------------
探讨
我想判断a(a 表是另外的表,不是我要更改的表哟)表的m列,如果m列的值为0,则执行下面的更改。

------解决方案--------------------
SQL code

if object_id('a','U') is not null
   drop table a
go
create table a
(
 id int,
 m int
)
go
insert into a
select 1,2 union all
select 2,0 
go
if object_id('b','u') is not null
   drop table b
go
create table b
(
 id int,
 c varchar(10)
)
go
insert into b
select 1,'11' union all
select 2,'22'
go
if object_id('tr_b','tr') is not null
   drop trigger tr_b
go
create trigger tr_b on b
for update
as
  if not exists(select 1 from a inner join inserted on a.id=inserted.id and a.m=0)
     rollback
go
update b set c='111' where id=1  --A表中id为1的m不等于0,终止更新
go
update b set c='222' where id=2  --A表中id为2的m等于0,继续更新
go
select * from b  --可以看到第一条更新未执行,第二条更新执行成功
/*
id          c
----------- ----------
1           11
2           222

(2 行受影响)

*/