【问题标题】:Transfer Data from SQL Query to i Series (AS400)将数据从 SQL 查询传输到 i 系列 (AS400)
【发布时间】:2014-06-19 21:34:36
【问题描述】:

将在 SQL 中查询的数据转移到 i 系列平台 (AS400) 上的表中。我正在查询 3 行,需要在 AS400 i 系列平台上的表中填充这些行。 AS400 中的表已经创建,并且有必要的列来接受来自 SQL 的数据。 AS400 表列 = PPRP#1、PPDATE、PPCOUNT

SQL 命令

select b.new_SalesrepId as PPRP#1, max(CONVERT(varchar(8), a.ScheduledStart, 112)) as PPDATE, count(b.new_SalesrepId) as PPCOUNT from ActivityPointerBase as a
join SystemUserExtensionBase as b on b.SystemUserId = a.OwnerId
where a.ActivityTypeCode = '4201' and b.new_SalesrepId is not NULL and a.StateCode = '1' and a.ScheduledStart <= GetDate()
group by b.new_SalesrepId, CONVERT(varchar(8), a.ScheduledStart, 112)
order by b.new_SalesrepId ASC

这将是一项夜间工作,因此在晚上 11 点 SQL 将查询上面的记录,然后将它们写入 AS400 表的正确列。

我不熟悉的唯一部分是如何告诉 SQL 将记录写入 AS400 表?

更新 1:我能够成功地通过在 SQL 中创建链接服务器到我们的 i 系列框。必须启用某些设置才能使连接正常工作。如果有人想知道就问吧。

更新 2:好的,我让这条语句成功运行 select * from AS400.S062f7ar.APLUS83MDS.PEPAPPTS',但是当我尝试进行如下更新时:

Update [AS400].S062f7ar.APLUS83MDS.PEPAPPTS
set PPCOUNT = '7'
where PPREP1 = 'FIR00107' 

我收到一条消息:链接服务器“AS400”的 OLE DB 提供程序“IBMDASQL”返回消息“SQL7008:APLUS83MDS 中的 PEPAPPTS 对操作无效。 原因 。 . . . . :原因码是 3。原因码是: 1 -- PEPAPPTS 没有成员。 2 -- PEPAPPTS 已免费存储。 3 -- PEPAPPTS 未记录,对期刊无权限,或期刊状态为 *STANDBY。具有 CASCADE、SET NULL 或 SET DEFAULT 的 RI 约束操作的文件必须记入同一日志。恢复 。 . . : 3 -- 开始在 PEPAPPTS (STRJRNPF) 上记录日志,获取日志的访问权限,或更改...

这是我必须在 i 系列文件上允许写入此表的内容吗?

【问题讨论】:

    标签: sql odbc ibm-midrange jobs transfer


    【解决方案1】:

    表 PEPAPPTS 没有在 DB2 for i 上记录。让 DB2 系统管理员记录表。

    如果由于某种原因无法接受,请关闭驱动程序中的承诺控制。使用 IsolationLevel *NONE(或者可能是 Chaos)。

    有关文档,请参阅:开始 > 程序 > IBM i Access > Programmer's Toolkit > OLE DB Provider Technical Reference。

    【讨论】:

    • 感谢您的反馈。我有一个 DB2 程序员在有问题的表上启用日记功能,然后我可以进行测试。您是否有将 IBMDASQL 驱动程序的承诺控制、IsolationLevel 设置为 *NONE 的经验?我查看了技术参考资料,但在承诺控制下并没有提供太多帮助。谷歌搜索也没有帮助我的事业。理想情况下,我想在驱动程序中将其设置为 *NONE,这样我们就可以为 PEPAPPTS 保留日记功能。谢谢!
    • 我在 DB2 方面工作。尝试将 IsolationLevel=*NONE 添加到您的连接字符串。
    • 要更新,打开日记功能就像一个魅力。我将尝试将其添加到连接字符串中,看看效果如何。感谢您的帮助!
    【解决方案2】:

    您的查询中可能缺少数据库(目录)或库(架构)。一般我都是这样用的

    insert into sqlTable
       select * from linked_server_name.database.library.table;
    

    【讨论】:

    • 我正在尝试从 SQL 插入 IBM i 表。我相信你上面提到的是从 IBM i 表更新 SQL 表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    相关资源
    最近更新 更多