我正在尝试将我的一些表存档到同一服务器上的另一个数据库中。但是INSERT INTO ... SELECT ... FROM在构建时给出了一个错误(SQLSTATE = 42704)。该表存在于第二个数据库中。 有人能帮忙吗?
答案 0 :(得分:1)
从您的问题中不清楚使用的是什么版本的DB2。我认为它是Linux,Unix和Linux; Windows版本。您希望使用联合来链接这两个数据库。
查询的SELECT部分是否可以在LS2DB001中运行?值得尝试确定您遇到问题的数据库。
假设问题出在LS2DB001上,如果您定义了联合链接的用户对查询中的基表具有权限,请检查它们是否具有系统目录表的权限。如果没有,他们将无法解析并验证您是否可以运行查询。
答案 1 :(得分:1)
我们破解了!如果使用以下脚本,那么它可以工作。 LOAD无需在复制的批次行之间进行COMMIT即可运行。 ('事务日志已满......'错误问题也已解决)
连接到LS2DB001; 导出到IXF的“C:\ temp \ TIN_TRIGGER_OUT.IXF” 消息“C:\ temp \ TIN_TRIGGER_OUT.EXM” SELECT * FROM LS2USER.TIN_TRIGGER_OUT; 连接重置; 连接到LQIFCOLD; 从IXF的“C:\ temp \ TIN_TRIGGER_OUT.IXF”加载 消息“C:\ temp \ TIN_TRIGGER_OUT.IMM” INSERT INTO LS2USER.TIN_TRIGGER_OUT复制无索引模式AUTOSELECT; 承诺; 连接重置;
答案 2 :(得分:0)
我在http://www.connx.com/products/connx/Connx%208.6%20UserGuide/CONNXCDD32D/DB2_SQL_States.htm找到了这个: 42704未定义的对象或约束名称。修改SQL语法并重试。
有关更多帮助,请尝试更具体,例如粘贴完整的sql语句,表格方案等。
答案 3 :(得分:0)
你可以做到
Select 'insert into tblxxxx (blabla,blabal) values(' + fld1 + ',' + fld2 + ',' ...... + ')'
From tblxxxxxx
将结果复制为文本脚本,并在其他数据库中执行。
答案 4 :(得分:0)
执行此操作的最佳方法是创建自定义脚本。根据表的大小(记录的数量),您可以将所有数据选择到内存中,然后将它们翻转,将它们插入到您首先创建的表的副本中,或者可以将数据导出为一个csv文件或一些其他基于文本的文件,然后翻转它以将数据插入另一个表。
如果您没有可以执行此操作的某种正式备份程序,这将是您最好的选择。
注意:某些db2数据库(例如iSeries上的数据库)实际上没有“数据库”,它们具有库。使用正确的用户配置文件,您可以同时访问两个库,将它们连接在一起或执行
create table library/newFilename as
(select * from originallibrary/originalfilename) with data
但这仅适用于我认为的iSeries。
答案 5 :(得分:0)
我正在写这个回答作为另一个答案,所以我有更多空间。
我只能建议将步骤分解为其组件,然后继续查看错误发生的位置。再说一遍,我假设你正在使用联邦:
a)在您的FROM数据库中,以您用于联盟链接的用户身份进行连接,您的选择是否正常工作?
b)在你的TO数据库中,使用链接,选择是否有效?
c)在你的TO数据库中,通过存储过程使用链接,选择是否有效?
d)在你的TO db中,使用INSERT ...值(x,y,z),你可以插入表格吗?
e)在你的TO db中,通过存储过程,使用INSERT ... values(x,y,z),你能插入吗?
如果没有更多信息,这是我能提出的最好的攻击方式。