我正在寻找一种方法来在插入低优先级数据时继续执行事务,尽管存在错误。似乎真正的嵌套事务可能是一个解决方案,但它们不受SQL Server 2005/2008的支持。另一个解决方案是通过逻辑来判断错误是否严重,但看起来这也是不可能的。从事务中的SQL批处理中止错误中恢复?另类?
这里有我的方案更加详细:
数据使用ADO.NET/C#数据库periodicaly插入,而一些它是至关重要的,有的还可能会丢失没有问题。插入完成后,会对数据进行一些计算。 (无论是重要的还是非重要的)整个过程都在交易中,因此一切都保持同步。
当前使用事务保存点,并且对非重要插入过程中发生的异常进行部分回滚。但是,这不适用于“批次中止”错误,它会自动回滚整个事务。我知道一些错误至关重要,但SQL Server认为失败的转换类型是批处理中止错误。 (Info on batch errors)我试图防止这些错误,如果它们发生在低优先级数据上,则会导致整个插入错误。
如果我所描述的是不可能的,我愿意考虑任何替代方法来实现数据完整性,但允许非重要插入失败。
感谢您的帮助。
我曾考虑过使用第二个连接,并使用单独的事务处理,这有点沿着#4的路线。我一直在寻找更好的解决方案,因为它需要访问未提交的主数据,并且如果主数据失败需要手动清理,但它可能只是最好的方法。感谢您的详细解答! – Djof 2009-11-12 14:54:59