【发布时间】:2019-07-12 10:19:05
【问题描述】:
我们要迁移到的 ERP 系统需要包含 5,000 行或更少行的 csv 文件用于 GL。每个文件中的借记和贷记交易必须平衡为零。有多个借记和贷记交易行共享一个公共交易 ID。
使用 offset 和 fetch next 我已经能够一次提取 5000 行,但是贷方和借方不平衡。
数据示例:
TranID Credit Debit Balance Account#
1 250 0 250 ABC
1 0 250 0 DEF
2 0 100 -100 GHI
2 50 0 -50 JKL
2 50 0 0 MNO
declare @batchsize INT = 5000,
@loopcount INT = 0;
while (@loopcount*@batchsize < (select count(*) from [Apps2].[dbo].[GLTrans]))
begin
SELECT * FROM [Apps2].[dbo].[GLTrans]
ORDER BY tranID
offset (@batchsize * @loopcount) rows
fetch next (@batchsize) rows only
set @loopcount= @loopcount + 1
end
【问题讨论】:
-
所以每笔交易的总和为零?那么问题是如何在不拆分事务的情况下找到尽可能多的行,最多 5000 行?
-
是的,卢比。你是对的,尽可能多的行最多 5000 行而不拆分事务(tranid)。
-
将运行总计连同行号和 id 计算到临时表中,然后找到运行总计为零的小于 5000 的最高行号?
-
选择 5000 行,然后丢弃那些具有“最后一个”事务 ID 的行。
标签: sql sql-server tsql sql-server-2012