我想使用来自我们服务器的当前值(通过VPN在不同的网络/域上访问)更新本地开发数据库上的静态表。使用数据导入/导出向导将是我的选择方法,但我通常遇到两个问题之一:
我想要的是正确的选项集,这意味着导入/导出向导将更新存在的行并插入不存在的行(基于主键或询问我使用哪些列作为键)。
我该如何使这项工作?这是在SQL Server 2005和2008上(我确信它在SQL Server 2000 DTS向导上也可以正常工作)。
答案 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值保持不变时它才有效。