使用SQL和JET进行SSIS事务

时间:2011-12-14 09:10:54

标签: sql ssis oledb jet

我们有一个复杂的SSIS包(+子包),它从Access数据库读取数据并更新SQL Server(2008 R2)数据库。

它工作正常,但我希望整个包是事务性的,因此要么插入/更新所有记录,要么都没有,以便SQL数据保持一致。

如果我在运行包时将包 TransactionOption 设置为 必需 ,我会收到一条消息,指出JET OLEDB连接无法在分布式事务中登记,并且程序包失败。

虽然对Access数据库进行了一些更新,但是如果它处于不一致状态并不重要,因为每次运行包时都会使用Access数据库的新副本。

是否有办法使用单个分布式事务运行包,但是从事务中删除了Access数据库连接?

我已经尝试了很多选项,但现在我只是绕圈子!提前谢谢。

道格

1 个答案:

答案 0 :(得分:2)

您的包逻辑看起来并不完全清楚,但一种可能的解决方案是首先将数据1:1从Access数据库复制到SQL Server中类似结构的表。然后,您可以继续使用存储过程进行处理,并且因为所有数据都已在服务器上,所以事务更容易控制。

如果您有其他外部依赖项,这可能是不可能的,但它是一种相当常见的ETL模式(首先将源数据复制到公共临时数据库,然后对其进行转换),因此也可能值得考虑更广泛的原因。但这是否适合您,在很大程度上取决于您的数据和系统环境。