这个触发器好象问题很多,给你一个我写的,可以正常触发 CREATE TRIGGER [tri_update_inrec] ON [dbo].[InRecord] FOR UPDATE AS Declare @NewNumber float,@OldNumber float,@OldPartCode int,@NewPartCode int if update(innumber) or update(PartCode) begin declare update_cursor cursor for select i.PartCode as NewPartCode,d.PartCode as OldPartCode,i.innumber as newnumber,d.innumber as OldNumber from inserted i ,deleted d where i.InRecordID=d.InRecordID open update_cursor fetch next from update_cursor into @NewPartCode,@OldPartCode,@NewNumber,@OldNumber while @@fetch_status=0 begin update part set CurrentStorage=CurrentStorage+@NewNumber where PartCode=@NewPartCode update part set CurrentStorage=CurrentStorage-@OldNumber where PartCode=@OldPartCode fetch next from update_cursor into @NewPartCode,@OldPartCode,@NewNumber,@OldNumber end close update_cursor deallocate update_cursor end
你是用MS SQL嗎?
在Create Trigger有語法上, 有分before update或 after update狀況嗎?
我试了一下,如果没有AND,即去掉几个条件可以触发,可是实际是这些条件缺一不可.怎么办??
CREATE TRIGGER [tri_update_inrec] ON [dbo].[InRecord]
FOR UPDATE
AS
Declare @NewNumber float,@OldNumber float,@OldPartCode int,@NewPartCode int
if update(innumber) or update(PartCode)
begin
declare update_cursor cursor for select i.PartCode as NewPartCode,d.PartCode as OldPartCode,i.innumber as newnumber,d.innumber as OldNumber from inserted i ,deleted d where i.InRecordID=d.InRecordID
open update_cursor
fetch next from update_cursor into @NewPartCode,@OldPartCode,@NewNumber,@OldNumber
while @@fetch_status=0
begin
update part set CurrentStorage=CurrentStorage+@NewNumber where PartCode=@NewPartCode
update part set CurrentStorage=CurrentStorage-@OldNumber where PartCode=@OldPartCode
fetch next from update_cursor into @NewPartCode,@OldPartCode,@NewNumber,@OldNumber
end
close update_cursor
deallocate update_cursor
end