如何使用单独数据库中另一个表的数据更新一个表? [复制]
Posted
技术标签:
【中文标题】如何使用单独数据库中另一个表的数据更新一个表? [复制]【英文标题】:How to update one table with data from another table in a separate database? [duplicate] 【发布时间】:2011-09-15 16:49:33 【问题描述】:可能重复:update one table with data from another
这里是极端 SQL 菜鸟。我有两个数据库(Database1、Database2)。每个数据库都有相同的表。我想用来自 Database1 (Database1,TableA -> Database2,TableA) 的 TableA 中的数据更新 Database2 中的 TableA。
最好的方法是什么?
【问题讨论】:
您使用的是哪个 RDBMS(MS SQL、Oracle、mysql)?您想用源表完全覆盖目标表吗?只需添加新行? 这是在 MS SQL 中。基本上,目标表包含与源表相同的数据,但源表在现有行中可能具有不同的值和/或具有新行。我希望目标表与源表匹配,因此如果目标表中不存在新行,我可能必须插入新行,并更新现有行。 您需要多久同步一次这两个表?您是在寻找实时信息还是每天都在寻找? 这可能只是一次更新。 【参考方案1】:像这样,假设您使用 dbo
架构。
insert into Database2.dbo.TableA (column1, column2, etc)
select column1, column2, etc
from Database1.dbo.TableA
如果传入数据应该覆盖旧数据或者您正在使用身份字段,您可能需要先truncate Database2.dbo.TableA
。
如果您需要表格中的 id 完全相同,您应该在运行脚本之前禁用 Database2.dbo.Table
上的标识属性,然后重新启用它。
【讨论】:
【参考方案2】:如果您将此作为一次性数据同步,当您右键单击特定数据库时,SQL Server 会在“任务”选项下提供导入/导出数据。您可以选择要用作数据源和目标的 sql server/database/tables,然后运行该作业。进行此设置后,将有机会设置一个选项以清除目标表并插入源中的所有数据。
您还可以安排这些类型的事务按计划运行,尽管我在这方面从未做过太多工作。
【讨论】:
尝试了导入/导出方法,但在复制过程中失败。错误消息非常神秘,不是很有用。有没有办法编写这个脚本?我也尝试了上面贾斯汀的解决方案,但它未能插入重复键。我只想插入新的行/键并更新现有的行/键(如果它们不同)。 你能发布错误信息吗?如果您先清除目标表中的所有记录,则可以使用 Justin 的方法。那应该避免重复的键。为了清除您的记录,我使用了 truncate table,这对我来说更有效。 谢谢。我会尝试“截断”,然后尝试运行 Justin 的方法。 这里是错误信息(还有很多,但这里是要点):"Violation of PRIMARY KEY constraint 'PK_SharedContent_sharedContentGuid'. Cannot insert duplicate key in object 'dbo.SharedContent'.". (SQL Server Import and Export Wizard)
。我想我只需要先清除目标表。 :-)
看起来这两个问题都与清除旧数据以避免重复键有关。以上是关于如何使用单独数据库中另一个表的数据更新一个表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
SQL 更新一个表中的值以匹配 Oracle SQL Developer 中另一个表的值
如何从 SQL Server 2005 中另一个表中的相应数据更新一个表中的数据