如何确保SQL Server中的一次一个处理?

时间:2010-03-05 13:10:31

标签: sql-server

我有一个数据上传功能,可以将一些数据加载到多个表中并对其进行处理。我希望我的用户能够一次启动两次上传(虽然这将是例外而不是规则),但在那种情况下,我希望在第二次上传开始之前完成第一次上传。 (整个过程大约需要20秒)。

这样做的原因是,如果两次上传同时将数据放入表中,那么它们会干扰彼此的数据。 (旁注:我最初计划使用临时表来实现进程隔离,但找到了我couldn't do that)。

在上传1完成之前,确保上传2等待的最佳方法是什么?我可以创建一个用作互斥锁的表,并在包含整个过程的事务中获取该表(或已知行)的锁,但是有更清晰或更有效的方法吗?

4 个答案:

答案 0 :(得分:1)

我建议将每个上传内容放入自己的交易中。这样他们就不会干涉。

答案 1 :(得分:1)

创建一个可序列化的sproc,用于发出唯一标识符并使​​用该ID值标记上载。然后他们可以进入同一张桌子。然后,上传者可以启动标记有该ID的批处理,以将数据合并到目标中。

答案 2 :(得分:1)

交易应该提供隔离。你能解释为什么他们不适合你的情景吗?

答案 3 :(得分:1)

在所有上传例程中,请求在每个受影响的表上使用独占TABLOCK。这样,第二次上传将等到现有的TABLOCK被释放。

相关问题