如果WHERE条件为真,则TRIGGER INSERT最后一行插入所选表之一

时间:2012-11-06 22:21:13

标签: sql-server-2008

我当前正在使用表中的触发器将最后一行复制到基于WHERE条件和ORDER BY的指定表中。使用一个触发器工作正常并复制到相应的表。但是两个触发器都在运行,导致前一行的重复出现在我不希望插入的表中。 (SQL2008 Management Studio)。我有基于partnumber发送此行的特定表。这是结构:

ALTER TRIGGER NewT3650 ON JD_Passdata
FOR INSERT 
AS
INSERT T3_650_TestData (SerialNumber, Partnumber, etc)
SELECT TOP 1 SerialNumber, Partnumber, etc
FROM JD_Passdata
WHERE partnumber = 'T3_650'
ORDER BY passdata_ndx DESC

ALTER TRIGGER NewT4450 ON JD_Passdata
FOR INSERT 
AS
INSERT T4_450_TestData (SerialNumber, Partnumber, etc)
SELECT TOP 1 SerialNumber, Partnumber, etc
FROM JD_Passdata
WHERE partnumber = 'T4_450'
ORDER BY passdata_ndx DESC

原始PassData表:

201244999, T4_450
201245001, T3_650
201245002, T3_650
201245003, T3_650

返回表1的结果

201245001, T3_650
201245002, T3_650
201245003, T3_650

返回表2的结果

201244999, T4_450
201244999, T4_450
201244999, T4_450

我希望这是一个OR条件或UNION,只取最后一行并将其输入正确的表并尽可能删除其他触发器。否则,检查重复和更新也可以这样做。此外,数据库将变得非常大以进行DESC,每个条目可能会变慢。删除订单的方法也是一个考虑因素。

任何sugesstions将不胜感激...... THX

1 个答案:

答案 0 :(得分:0)

我有一个适用于两个触发器的解决方案,但是当发生“NULL”结果时可能会导致问题。它确实摆脱了ORDER BY并且可能更快。这样做是使用唯一的最后一行索引号作为行位置,并检查部件号以确定插入新表。此外,当我为不同的表使用相同的格式添加第三个触发器时,初始移动到主表(JD_PassData)失败。不知道为什么。

这是新代码:

ALTER TRIGGER NewT3650 ON JD_Passdata 插入后 如 INSERT T3_650_TestData(SerialNumber,Partnumber等) SELECT SerialNumber,Partnumber等 来自JD_Passdata WHERE passdata_ndx =(SELECT MAX(passdata_ndx)FROM JD_PassData)AND PartNumber ='T3_650'