我最近开始使用 SSDT 架构以及数据和比较工具。多年来,我一直在使用 Red Gate 的 SQL 比较和 SQL 数据比较,但我认为 VS 工具可能就足够了,我想看看我是否可以忍受它们。在过去的几个月里,它们一直运行良好,但今天在比较本地数据库和 Azure SQL 数据库之间的架构时,我得到了一个奇怪的结果,我想为 Web 应用程序部署更改。架构比较已将若干列标记为不同,并指示它们将被删除。实际上,添加了一个新列。但是,其他列中的任何内容都没有改变。我勾选了“忽略列顺序”框,以便不考虑列顺序。
这是它的样子:
只是颜色不对吗?即使没有任何变化,它是否会实际删除 PermitLimit 列并重新创建它?我是否需要设置其他一些设置,以便这些相同的列不会被突出显示为有差异?
模式比较 UI 有时会在面对这样的多个更改时有点混乱。您应该使用“生成脚本”按钮来查看在运行时将进行哪些实际更改。通常,您希望您的测试运行与您实际部署更改的方式尽可能相似。
在您的情况下,导致混淆的组合是:
我可以通过创建此表并在本地部署它来重复您的问题:
现在,我可以更改源文件以重新排序 int 和 string 列,架构比较工具将默认显示该更改:
正如您所提到的,我可以使用小齿轮图标启用“忽略列顺序”设置,然后架构比较显示没有任何变化。
如果我然后去给我的默认约束命名:
架构比较显示列顺序更改和约束名称更改,即使我仍然选中了“忽略列顺序”:
查看实际将进行哪些更改的更可靠方法是单击工具栏中的“生成脚本”按钮:
生成的脚本不会删除并重新添加任何列: