Sql 将表从一个数据库复制到另一个数据库

Sql 将表从一个数据库复制到另一个数据库,sql,db2,Sql,Db2,我正在尝试将一些表归档到同一服务器上的另一个数据库中。但是,插入到…选择…从中会在生成时给我一个错误(SQLSTATE=42704)。该表存在于第二个数据库中。 有人能帮忙吗 我在: 42704未定义的对象或约束名称。修改SQL语法并重试 要获得更多帮助,请尝试更具体一些,例如粘贴完整的sql语句、表方案等。您可以这样做 Select 'insert into tblxxxx (blabla,blabal) values(' + fld1 + ',' + fld2 + ',' ...... +

我正在尝试将一些表归档到同一服务器上的另一个数据库中。但是,插入到…选择…从中会在生成时给我一个错误(SQLSTATE=42704)。该表存在于第二个数据库中。 有人能帮忙吗

我在: 42704未定义的对象或约束名称。修改SQL语法并重试

要获得更多帮助,请尝试更具体一些,例如粘贴完整的sql语句、表方案等。

您可以这样做

 Select 'insert into tblxxxx (blabla,blabal) values(' + fld1 + ',' + fld2 + ',' ...... + ')'

From tblxxxxxx

将结果复制为文本脚本并在其他数据库中执行。

最好的方法是创建自定义脚本。根据表的大小(记录的数量),您可以选择将所有数据放入内存,然后将其滚动到您首先创建的表的副本中,也可以将数据导出为csv文件或其他基于文本的文件,然后将其滚动到另一个表中

如果您还没有某种正式的备份过程可以做到这一点,那么这将是您最好的选择

注意:有些db2数据库,例如iSeries上的数据库实际上没有“数据库”,它们有库。使用正确的用户配置文件,您可以同时访问两个库,将它们中的表连接在一起,或者执行以下操作:

create table library/newFilename as 
(select * from originallibrary/originalfilename) with data

但我相信这只适用于iSeries。

您的问题不清楚使用的是什么版本的DB2。我假定它是Linux、Unix和Windows版本。您似乎正在使用联合来链接这两个数据库

从LS2DB001中选择查询的一部分是否有效?值得一试的是确定您对哪个数据库有问题


假设问题出在LS2DB001上,如果与您定义联合链接的用户对查询中的基表具有权限,请检查他们是否对系统目录表具有权限。如果没有,他们将无法解析和验证您是否可以运行查询。

我将此响应作为另一个答案,这样我就有了更多的空间

我只能建议将步骤分解到它们的组件中,然后继续工作以查看错误发生的位置。同样,我假设您正在使用联邦:

a) 在FROM db中,作为用于联邦链接的用户进行连接时,select有效吗

b) 在TO db中,使用链接,select是否起作用

c) 在TO db中,通过存储过程使用链接,select是否起作用

d) 在TO db中,使用INSERT…values(x,y,z)可以插入到表中吗

e) 在TO db中,通过存储过程,使用INSERT…值(x、y、z),可以插入吗


没有更多信息,这是我能建议的最好的攻击线。

我们已经破解了它!如果使用以下脚本,则它可以工作。加载工作时不必在复制的行的批之间提交。(“事务日志已满…”错误问题也已解决)

连接至LS2DB001; 导出到IXF的“C:\temp\TIN\u TRIGGER\u OUT.IXF” 消息“C:\temp\TIN\u TRIGGER\u OUT.EXM” 从LS2USER.tinu触发器中选择*OUT; 连接复位; 连接到LQIFCOLD; 从IXF的“C:\temp\TIN\u TRIGGER\u OUT.IXF”加载 消息“C:\temp\TIN\u TRIGGER\u OUT.IMM” 插入LS2USER.tinu触发器输出复制无索引模式自动选择; 犯罪
连接复位

嗨,你能发布完整的SQL代码吗。您正在使用DB2吗?嗨,John,请看下面我的SQL,其中lqifcold=数据库名称,ls2user=模式插入lqifcold.ls2user.TIN_触发器(fld1…)(从LS2DB001.ls2user.TIN_触发器中选择flds…)。是的,我正在使用DB2。谢谢John AnitaHi Tehvan谢谢,但我已经从各个方面修改了语法…不走运。请参阅下面我的SQL,其中lqifcold=数据库名称,ls2user=模式插入lqifcold.ls2user.tinu触发器(fld1…(从LS2DB001.ls2user.tinu触发器中选择flds…)Hi Ryan感谢您的帮助。但是,该表包含大约1 mil行。导入/导出在这方面不起作用,因为在两者之间提交数据受到限制。还有其他建议吗?顺便说一句,是的,这种操作可以而且应该有效,这应该只是一个确定错误在哪里的问题。嗨,马克,谢谢你的输入。我已经尝试在两个数据库中使用此sql构建存储过程。在LQIFCOLD(TO db)中,我得到SQLSTATE=42704未定义的名称LS2DB001.LS2USER.TIN\u TRIGGER\u OUT。在LS2DB001(来自db)中,我得到SQLSTATE=42703 LQIFCOLD.LS2USER.TIN\u TRIGGER\u OUT在所使用的上下文中无效。您好,马克,再次感谢您的输入。我没有使用联邦数据库。我们有一个非常基本的DB2设置,有非常基本的工具来帮助编码。跨数据库处理只能用联邦数据库完成吗?如果是,如果只更改“to”数据库,会有什么影响?最后,我该如何改变?抱歉,但我对DB2完全陌生。谢谢如果您需要更多信息,请告诉我,我会发送给您。谢谢你,安妮塔。很明显,我在假设你在做什么的时候走错了方向。为了进一步提供帮助,你必须更详细地说明你在做什么。e、 g.您是如何连接到数据库的,以及您的代码是如何工作的。对不起,马克,也许我没有清楚地解释这个问题。练习的目的是将数据从DB1中的TBL1复制到DB2中的TBL2。在我的项目中,我定义了这两个数据库并授予了相应的身份验证。