我使用 .Net 2.0、ADO.NET、数据集和数据适配器来管理我的数据,并使用 Microsoft SQL Server 2005 作为数据库管理器。
我有一个应用程序,可以生成大量结果(500K+)并将它们保存在数据库中。如果一个结果生成失败,我不想保存任何结果。因此,我将所有数据库插入放入一个事务中,如果无法生成结果,该事务将回滚。
但是,在写入所有结果之前,表会被锁定,这不是我想要的。或者至少我猜它被锁定了,在插入结束之前没有 SELECT 查询响应。
有没有办法让事务在事务处于事件状态时不锁定表?
使用进行如此多插入的事务是个好主意吗?
最佳答案
您可以使用临时暂存表。按照您的节奏填写。然后将一个 SELECT INTO 作为单个事务执行最后一步。大移动完成后,删除临时表。
如果对整体完整性有一些更强的限制,您可以引入更多的轻量级表、反射(reflect)数据流阶段的表、日志/日志表。一些恢复/补偿/清理例程等。
关于.net - SQL Server 数据库可以在事务期间应答吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1810027/