我们最近将JD Edwards EnterpriseOne系统从和and 400/DB2平台转换为Windows & Server。在旧系统中,我们有一个RPG/CL程序,可以将数据从AS400库传输到会计系统以供进一步处理。最终用户需要启动这个过程,因此它通过菜单命令执行。
为了在转换后复制此行为,我在Server 2008 R2中创建了一个存储过程,该存储过程通过链接服务器将记录从as400插入到Server数据库,然后更新as400上的记录,以指示记录已被处理。为了让最终用户能够执行这个过程,我创建了一个执行存储过程的SSRS (2005)报告。
当SSRS报告以交互方式执行时,我们断断续续地得到一个错误,“在此XML文档中禁止DTD进行安全重置”,这是由于SSRS内存不足造成的。
有人知道另一种/更好的传输数据的方法吗?
存储过程的转移/更新本质上是
INSERT INTO [SQL DEST TABLE]
SELECT *
FROM [AS400 Linked Server/Table]
UPDATE OPENQUERY (AS400_LINK, 'MY SELECT QUERY')
SET FLAG = PROCESSED;发布于 2013-11-28 06:27:52
您应该获得更好的数据库性能,可以允许服务器在可能的情况下使用它自己的数据执行工作,而不是必须来回传输它。
我会对情况作出一些猜测,如果你纠正我,我会很高兴地调整答案,以适应你的情况。这听起来像是从DB2中的会计事务表中提取数据,完成后,您希望更新这些记录中的标志。这可能意味着记录基本上可以永远保存在该表中,或者可能是其他一些过程清除了它们。在您的选择中没有位置,所以我假设它们确实会被移除。我假设我们不知道是否会在任何时候将更多的记录添加到事务表中,包括从提取信息到更新标志之间的任何时间。
我想知道您是否能够在提取标志之前立即更新它们,然后才实际处理Server?这在后勤和业务需求中会被允许吗?
假设你..。
所以在DB2中,#1看起来可能是
INSERT INTO workfile
SELECT *
FROM transactions
WHERE flag = unprocessed在步骤3中,对于Server无法正确处理的任何记录,Server作业可以将工作文件中的标志更新为错误状态。
关于DB2的第4步可以是
UPDATE transactions
SET flag = processed
WHERE transid IN (SELECT transid
FROM workfile
WHERE flag <> error
)希望在Server上处理错误是相当罕见的。如果该进程仅在错误的情况下更新工作文件中的事务,则这应该比每次成功地传输更新更快。上面的UPDATE语句应该能够在DB2上运行得更快,因为它是由同一服务器上的工作文件驱动的,而不是将数据传输回DB2。
https://stackoverflow.com/questions/20243813
复制相似问题