我正在尝试在Visual Studio 2013/15中使用SQL架构比较,并且遇到了从删除表中删除表的问题,使得它们完全无法处理。
问题在于它尝试删除的表是客户制作的表,因此当我们将我们的版本与其数据库同步时,它会要求删除它们。我们不想删除它们,但是它们的一些表对我们的表有约束,因此当它尝试CCDR时由于表约束而失败。有没有办法添加表(重新创建?像其他人一样?),而不是为每个客户端编写脚本来执行SQL Schema Compare已经为这几个表做的事情?
Red-Gate的SQL Compare以某种方式做到这一点,但它对我们隐藏,所以不太确定它是如何实现的。删除不会删除,但也不会在脚本上出错。
更新:
“不在源中删除约束”选项似乎无法正常工作。它确实会丢掉一些,但是还有一些它不会放弃约束。在red-gate的工具中,当我们比较时,我发现了如何从中获取SQL,而他们的产品并没有说表需要根据需要进行更新,而Visual Studio则可以。它们似乎工作几乎相同,但失败的表是根本不应更新的表(见下文)
更新2:
我发现的另一个问题是“Ignore column collation”也无法正常工作,因为不应该被删除的表被告知需要更新,即使它只是列更改的顺序,而不是实际的列或数据更改,这使得感觉更像是一个错误报告而不是任何东西。
答案 0 :(得分:1)
我对这些类型的高级数据计算的建议是不使用Visual Studio。将逻辑放在Sql引擎上,并在Sql中为此编写代码。由于Sql引擎的多用户锁定问题,当用户操作的错误组合同时发生时,这些类型的进程很容易失败。由于Sql引擎可以更改记录,Visual Studio工具无法与数据锁定问题进行交互。如果您使用它,只有在单用户模式下才能安全运行。
使用工具是一件好事,比编写Sql更容易,但是沿着这条路走下去会有巨大的可靠性和一致性风险。
答案 1 :(得分:0)
我不知道这是否会有所帮助,但我找到了这一段 在下一页: https://msdn.microsoft.com/en-us/library/hh272690(v=vs.103).aspx
更新将失败,因为我们的更改涉及更改列 从NOT NULL到NULL,结果导致数据丢失。如果你想 继续更新,单击选项按钮(第五个 从左侧开始,在Schema Compare的工具栏上取消选中 如果数据丢失选项阻止增量部署。