0

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

  1. 我得到主键违规错误,整个事情都退出了。这是因为它试图插入我已经拥有的行。
  2. 如果我在向导中设置“从目标中删除”选项,我会收到外键违规错误,因为其他表中存在引用这些值的行。

我想要的是正确的选项集,这意味着导入/导出向导将更新存在的行并插入不存在的行(基于主键或询问我将哪些列用作键)。

我怎样才能使这项工作?这是在 SQL Server 2005 和 2008 上的(我确信它在 SQL Server 2000 DTS 向导上也可以正常工作)。

4

4 回答 4

1

我不确定您是否可以在管理工作室中执行此操作。我在同步数据库方面使用 RedGate SQL Data Compare有过一些很好的经验,但您必须为此付费。

于 2010-02-04T09:39:02.963 回答
1

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

于 2010-02-04T09:49:51.700 回答
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)
于 2010-02-04T08:30:00.433 回答
0

如果您在第二个选项期间禁用 FK 约束 - 并在 finsih 后恢复它们 - 它会起作用。

但是,如果您使用身份创建包含在 FK 中的 pk - 它会导致问题,因此它仅在 pk 值保持不变的情况下才有效。

于 2010-02-04T08:30:51.290 回答