执行插入事务时要获取所有用户表的行数

时间:2018-07-09 16:29:13

标签: c# sql sql-server transactions transactionscope

enter image description here

基本上我在做的是在一个完整的事务范围中插入新数据(最终提交)之前获得所有表的行数,在我的情况下,它是工作的单个事务,但是当同时执行多个事务时却不工作时间。

第二笔交易查询操作在我的第一笔交易执行插入操作的同时等待(获取所有行数)

此外,我尝试将其作为IsolationLevel.ReadUncommitted,但它不起作用

1 个答案:

答案 0 :(得分:0)

像您想要获得的声音一样,是在插入过程中插入的运行进度。这是正确的吗?

如果是这样,则问题是SQL Server进行了批量提交,因此,您必须等到提交完成后才能访问它。一种解决方法是将插入事务分成较小的批次,然后可以查询它们。请记住,这是未经测试的伪代码,但是我过去使用WHILE LOOP做过类似的事情。

首先收集您要提交的第一批记录:

SELECT * FROM table // get your 100,000 records
INTO #holdingTable

然后基于例如1,000的块创建一个while循环

DECLARE @totalCount int = 100000, @myCount int = 1000

WHILE (@myCount <= @totalCount)
BEGIN
   SELECT top 1000 Id from #holdingTable
   INTO #tempHolding

   INSERT #tempHolding INTO myTable

   DELETE #tempHolding FROM #holdingTable

   SET @myCount = @myCount + 1000
END

这个想法是将100,000条记录以1,000条为循环,插入它们,然后从临时表中删除插入的记录,以便您可以选择下一个1,000条。类似于分页。关键是随时删除它们,这样就不会多次插入相同的记录。

这不是最终的解决方案,但我希望这能帮助您将方向正确。