我有一个触发器(SQL 2008 R2),它执行一个简单的操作,但结果不合逻辑。这是概述:
一个文本文件被馈送到一个带有一行(一条记录)的 SSIS 包,将其加载到“ORDERS_IN_PROCESS”表中。数据访问模式在“OLE DB 目标”中设置为“表或视图”以允许触发触发器。
这是我的 ORDERS 表:
OrderID ItemNo
--------- ---------
9813 1
9813 2
9813 3
9817 1
因此,SSIS 执行并且 ORDERS_IN_PROCESS 插入了一条记录,即 OrderID 9813
触发器被触发:
INSERT INTO ORDERS_ARCHIVE SELECT * FROM ORDERS WHERE OrderID=INSERTED.OrderID
到目前为止很简单...
我在 ORDERS_ARCHIVE(与 ORDERS 的布局相同)表中得到的结果是
OrderId ItemNo
--------- ----------
9813 3
2 个订单项的其余部分在哪里?
注意,它只将从 ORDERS 表中读取的最后一行插入到 ORDERS_ARCHIVE 中。
我需要 ORDERS_ARCHIVE 中的所有 3 个。
为什么会这样?
我相信这与 SSIS 使用“OLE DB Destination”处理它的方式有关,因为如果我手动将一条记录插入到 RLFL 中,触发器会完全按照它应该做的事情并从 BACK 插入所有 3 条记录。
您可能会争辩说,触发器每批次触发一次,我同意,但在这种情况下,我有一批只有一条记录。
我正在考虑一个 sp,但我不想为如此微不足道的事情增加另一个级别的复杂性,据说。
有任何想法吗?
谢谢。