这里的情景:
通过我们的会计应用程序处理采购订单时,它会将该条目插入INVNUM表,然后对该插入的条目进行一些更新。我有一个触发器,它将根据INVNUM表中的记录插入/更新将记录插入另一个表。
我遇到的问题是它对这一个条目进行的大量更新, ,它看起来最后两次更新完全相同 ,因此我的触发器插入两个条目,因为它无法区分两个更新(两个匹配的数据完全相同)。
所以基本上我想根据该采购订单的INVNUM表中的最后一次更新来插入我的记录。
以下是我尝试隔离插入表格中最后一个条目的内容:
Declare cur1 scroll cursor for (select * from Inserted)
Open cur1
FETCH LAST FROM cur1
While @@FETCH_STATUS = 0
Begin
Insert into JCTxLines (ID, JobID, iSource)
Values(3696,2,3)
End
Close cur1
Deallocate Cur1
然而,这段代码会挂起系统,我需要关闭它。
不确定这是否是解决问题的正确方法。我现在已经研究了几天,我对插入/删除表的理解仍然有限。
干杯!
答案 0 :(得分:0)
您在插入后忘记了FETCH NEXT,这是导致触发器挂起的原因。
您还可以尝试选择TOP ON FROM INSERTED吗?
DECLARE int
DECLARE icursor CURSOR FOR SELECT TOP 1 AutoIndex FROM INSERTED
OPEN icursor
FETCH NEXT FROM icursor INTO
WHILE @ = 0
BEGIN
Insert into JCTxLines (ID, JobID, iSource) Values(3696,2,3)
FETCH NEXT FROM icursor INTO
END
CLOSE icursor
DEALLOCATE icursor
你甚至可以选择SELECT DISTINCT FROM INSERTED