17

我正在尝试在 Visual Studio 2013/15 中使用 SQL Schema Compare,并且遇到了从删除中排除表会使它们完全无法处理的问题。

问题是它试图删除的表是客户制作的表,所以当我们将我们的版本与他们的数据库同步时,它会要求删除它们。我们不想删除它们,但是它们的一些表对我们的表有限制,因此当它尝试 CCDR 时,由于表限制而失败。有没有办法添加表(重新创建?像其他表一样?),而不需要为每个客户端编写脚本来执行 SQL Schema Compare 已经为那几个表所做的事情?

Red-Gate 的 SQL Compare 以某种方式做到了这一点,但它对我们隐藏,所以不太确定它是如何实现的。排除不会删除,但也不会在脚本上出错。

更新:

选项“删除不在源中的约束”似乎无法正常工作。它确实放弃了一些,但是还有其他一些它只是没有放弃约束。在 red-gate 的工具中,当我们比较时,我发现了如何从中获取 SQL,他们的产品根本没有说表需要更新,而 Visual Studio 的有。它们似乎工作起来几乎相同,但失败的表是根本不应该更新的表(阅读下文)

更新 2:

我发现的另一个问题是“忽略列排序规则”也不能正常工作,因为不应该被删除的表被告知它们需要更新,即使它只是列更改的顺序,而不是实际的列或数据变化,这让人感觉更像是一个错误报告。

忽略列排序检查

仍然显示列排序规则

4

2 回答 2

1

我对这些类型的高级数据计算的建议是不要使用 Visual Studio。把逻辑放在Sql引擎上,在Sql中为此编写代码。由于 Sql 引擎的多用户锁定问题,当用户操作的错误组合同时发生时,这些类型的进程很容易失败。由于 Sql 引擎可以更改记录,Visual Studio 工具无法处理数据锁定问题。如果你甚至让它工作,那么只有在单用户模式下才能安全运行。

这是一个很好用的工具,比编写 Sql 更容易,但是沿着这条路走下去存在巨大的可靠性和一致性风险。

于 2016-09-23T18:37:10.403 回答
0

我不知道这是否会有所帮助,但我在以下页面上找到了这一段: https ://msdn.microsoft.com/en-us/library/hh272690(v=vs.103).aspx

更新将失败,因为我们的更改涉及将列从 NOT NULL 更改为 NULL,从而导致数据丢失。如果要继续更新,请单击模式比较工具栏上的选项按钮(左起第五个),然后取消选中如果数据丢失则阻止增量部署选项。

于 2016-09-13T18:19:52.917 回答