0

我目前在表中使用触发器将最后一行复制到基于 WHERE 条件和 ORDER BY 的指定表中。使用一个触发器可以正常工作并复制到相应的表中。但是两个触发器都在运行,导致前一行的重复出现在我不想插入的表中。(SQL2008 管理工作室)。我也有根据零件号发送此行的特定表。这是结构:

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,每个条目可能会变慢。删除订单的方法也是一个考虑因素。

任何建议将不胜感激...... THX

4

1 回答 1

0

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

这是新代码:

ALTER TRIGGER NewT3650 ON JD_Passdata 后插入为 INSERT T3_650_TestData(序列号、零件号等)从 JD_Passdata 中选择序列号、零件号等,其中 passdata_ndx=(从 JD_PassData 中选择 MAX(passdata_ndx))AND PartNumber = 'T3_650'

于 2012-11-09T18:11:44.443 回答