create trigger 触发器名 on 表 for update,insert as declare @data1 int,@data2 int,@data3 int select @data1=data1,@data2=data2,@data3=data3 from inserted update 表 set value=(@data1+@data2+@data3)
alter table youtable add c as (isnull(date1,0)+isnull(date2,0)+isnull(date3,0))
CREATE TRIGGER a_change ON table FOR update,insert AS update t set value=data1+data2+data3 from table as t inner join inserted as i on t.bh=i.bh go触发器是针对多条记录组成的“集合”而操作的。不要仅仅用单条记录做测试,这样是很不负责任的程序员,这样的触发器反而会轻易破坏系统的数据一致性。如果确实要针对单条记录做计算,请写上检查条件。例如:CREATE TRIGGER a_change ON table FOR update,insert AS if @@rowcount>1 begin raiserror('对不起,没有对多条记录设计程序。请一次紧紧操作一条记录。',16,1) rollback tran return end update table set value=(select data1+data2 from inserted) where bh=(select bh from inserted) go 这是基本的常识。随意写,破坏力非常大。请大家注意捉虫!
FOR update,insert
AS
update table set value=(select data1+data2 from inserted)
bh data1 data2 data3 value
1 Null 20 20 的时候,相加就不可以????
??????????????????????
on 表
for update,insert
as declare @data1 int,@data2 int,@data3 int
select @data1=data1,@data2=data2,@data3=data3 from inserted
update 表 set value=(@data1+@data2+@data3)
update t set value=data1+data2+data3 from table as t
inner join inserted as i on t.bh=i.bh
go触发器是针对多条记录组成的“集合”而操作的。不要仅仅用单条记录做测试,这样是很不负责任的程序员,这样的触发器反而会轻易破坏系统的数据一致性。如果确实要针对单条记录做计算,请写上检查条件。例如:CREATE TRIGGER a_change ON table FOR update,insert AS
if @@rowcount>1 begin
raiserror('对不起,没有对多条记录设计程序。请一次紧紧操作一条记录。',16,1)
rollback tran
return
end update table set value=(select data1+data2 from inserted)
where bh=(select bh from inserted)
go
这是基本的常识。随意写,破坏力非常大。请大家注意捉虫!
对于批量插入的数据应该怎么办?