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

请看看这个问题,在线等
触发器怎样限定只对当前修改或增加的记录起作用而不对原来的记录起作用啊?用什么条件限制啊?谢谢

------解决方案--------------------

CREATE TRIGGER panding ON dbo.chanpin
FOR INSERT, UPDATE
AS
begin
update chanpin
set panding=( case when (a.A> =b.Axiaxian and a.A <=b.Ashangxian) then ' ' else 'A不合 ' end +
case when (a.B> =b.Bxiaxian and a.B <=b.Bshangxian) then ' ' else 'B不合 ' end )
from inserted a , biaozhuns b
where a.mingcheng=b.mingcheng
end
------解决方案--------------------
第二个问题。

如果产品名称(mingcheng)字段可以唯一标识每条记录(是主键)。
alter TRIGGER panding ON dbo.chanpin
FOR INSERT, UPDATE
AS
update chanpin
set panding=( case when (a.A> =b.Axiaxian and a.A <=b.Ashangxian) then ' ' else 'A ' end +
case when (a.B> =b.Bxiaxian and a.B <=b.Bshangxian) then ' ' else 'B ' end )
from inserted a , biaozhuns b
where a.mingcheng=b.mingcheng

是可以实现你的问题的。但是从你的预制数据:

insert into chanpin select '甲产品 ',25,4, ' '
union all select '甲产品 ',22,8, ' '
union all select '乙 ',35,7, ' '

可以看出,你的mingcheng字段无法保证唯一,所以你再次修改或者插入 '甲产品 '就会把原来的 '甲产品 '记录修改掉。解决方法是为chanpin表加入一个主键,如ID。

这样你可以使用:

alter TRIGGER panding ON dbo.chanpin
FOR INSERT, UPDATE
AS
update chanpin
set panding=( case when (a.A> =b.Axiaxian and a.A <=b.Ashangxian) then ' ' else 'A ' end +
case when (a.B> =b.Bxiaxian and a.B <=b.Bshangxian) then ' ' else 'B ' end )
from inserted a , biaozhuns b ,chanpin c
where a.id=c.id and a.mingcheng =b.mingcheng
go

没有环境。你自己测测:)