SQL Server:将表内容从一个数据库复制到另一个数据库

时间:2010-02-04 08:26:00

标签: sql-server data-transfer

我想使用来自我们服务器的当前值(通过VPN在不同的网络/域上访问)更新本地开发数据库上的静态表。使用数据导入/导出向导将是我的选择方法,但我通常遇到两个问题之一:

  1. 我遇到主键违规错误,整个事情都退出了。这是因为它试图插入我已经拥有的行。
  2. 如果我在向导中设置了“从目标中删除”选项,则会出现外键冲突错误,因为其他表中有行引用了这些值。
  3. 我想要的是正确的选项集,这意味着导入/导出向导将更新存在的行并插入不存在的行(基于主键或询问我使用哪些列作为键)。

    我该如何使这项工作?这是在SQL Server 2005和2008上(我确信它在SQL Server 2000 DTS向导上也可以正常工作)。

4 个答案:

答案 0 :(得分:1)

我不确定你能在管理工作室做到这一点。我有过一些很好的经历 RedGate SQL Data Compare用于同步数据库,但您必须为此付费。

答案 1 :(得分:1)

SQL Server Database Publishing Wizard可以为您感兴趣的表导出一组sql插入脚本。只需告诉它只导出数据而不是模式。它还会创建必要的drop语句。

答案 2 :(得分:0)

一种选择是将数据下载到新表,然后使用类似于以下的命令来更新目标:

update target set
    col1 = d.col1,
    col2 = d.col2
from downloaded d
inner join target t on d.pk = t.pk

insert into target (col1, col2, ...)
select (d.col1, d.col2, ...) from downloaded d
where d.pk not in (select pk from target)

答案 3 :(得分:0)

如果在第二个选项中禁用FK约束 - 并在finsih之后恢复它 - 它将起作用。

但是如果你使用identity来创建涉及FK的pk - 它会引起问题,所以只有当pk值保持不变时它才有效。