我有一个触发器(SQL 2008 R2)执行一个简单的操作,但结果不合逻辑.以下是概述:
文本文件被送到SSIS包,其中包含一行(一个记录),将其加载到"ORDERS_IN_PROCESS"表中.数据访问模式在"OLE DB目标"中设置为"表或视图"以允许触发器触发.
这是我的ORDERS表:
OrderID ItemNo
--------- ---------
9813 1
9813 2
9813 3
9817 1
Run Code Online (Sandbox Code Playgroud)
因此,SSIS执行并且ORDERS_IN_PROCESS获取一个插入的记录,即OrderID 9813
触发器被触发:
INSERT INTO ORDERS_ARCHIVE SELECT * FROM ORDERS WHERE OrderID=INSERTED.OrderID
Run Code Online (Sandbox Code Playgroud)
到目前为止很简单......
我在ORDERS_ARCHIVE(与ORDERS相同的布局)表中得到的结果是
OrderId ItemNo
--------- ----------
9813 3
Run Code Online (Sandbox Code Playgroud)
2行项目的其余部分在哪里?
注意,它只将从ORDERS表中读取的最后一行插入到ORDERS_ARCHIVE中.
我需要ORDERS_ARCHIVE中的所有3个.
为什么会这样?
我认为它与SSIS使用"OLE DB Destination"处理它的方式有关,因为如果我手动将记录插入到RLFL中,触发器就会完全按照它应该执行的操作并从BACK插入所有3条记录.
你可能会争辩说每个触发器触发一次,我同意但在这种情况下我只有一批记录.
我正在考虑一个sp,但我宁愿不为一些如此微不足道的东西增加另一层次的复杂性.
有任何想法吗?
谢谢.
我认为这根本不与SSIS有关,而是与你的触发器有关.而不是IN你在那里,尝试JOIN在您的查询中使用a :
INSERT INTO ORDERS_ARCHIVE
SELECT O.*
FROM ORDERS O
INNER JOIN INSERTED I
ON O.ORderID = I.OrderID
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |