SQLCMD 变量和 SSDT 模式比较问题

12
我希望下面的比较不显示差异。根据MSDN(参见步骤7),应该有一个可用的SQLCMD Variables函数,但我找不到它。这份文档是针对SQL 2010的,但我正在使用2012版。在此页面上似乎没有2012版本的文档可用。 我该如何指定$(DatabaseName)的值,以使此比较工作?我已经在数据库项目设置中指定了该值。 SQL Schema Compare

我认为你不能在项目和实时数据库之间进行这样的操作。即使该页面似乎暗示了这一点:“仅当比较两个项目时,您才能指定SQLCMD变量”。如果您生成一个用于更新数据库的脚本会发生什么? - Peter Schott
1
此外,如果这是针对数据库本地表的情况,为什么要指定数据库名称?只需使用“dbo.ClaimProvider”即可解决问题。我知道跨数据库查询可能不同,但这似乎并没有涉及到跨越多个数据库。 - Peter Schott
@PeterSchott 我经常进行跨数据库连接,因此保持所有名称一致看起来更美观,而不是在三部分和两部分名称之间切换。 - Keith Walton
@PeterSchott 我会尝试生成一个脚本。我的团队还不熟悉SSDT,所以我试图使用比较来查找直接对数据库进行的更改,并将其集成到数据库项目中。 - Keith Walton
1
我还建议在您的服务器上设置DDL审计,以捕获正在更改的内容。我之前在博客中写过这个问题:http://schottsql.blogspot.com/2010/02/ddl-schema-change-auditing-on-sql.html - Peter Schott
显示剩余2条评论
1个回答

6
你可以通过对比你的开发数据库和线上数据库来解决这个问题。请注意,你需要先将项目部署到你的开发数据库中。
另外,需要说明的是变量未被替换只会影响对比窗口,不会在对比时导致假差异(也就是说,在进行对比时Schema Compare会对变量进行替换),而在更新目标数据库时变量会被替换。

我正在尝试捕获开发人员在开发数据库中所做的修改,然后更新项目。如果我将项目部署到开发环境,那么岂不是会覆盖他们的更改? - Keith Walton
1
它可以是任何用于开发目的的服务器,甚至可能是您本地的数据库实例或专门用于模式比较的共享服务器。 - Keith
这是一个与编程有关的内容,请将其从英语翻译成中文。只返回已翻译的文本:或者,这是一个想法...让微软修复他们的比较功能中的缺陷哈哈。 - user5855178
这似乎确实是SSDT的一个缺点,但在尝试了这种方法后,我可以确认它是有效的。我倾向于使用模式比较然后从那里更新以部署更改,而不是从项目中发布。然而,使用发布到开发服务器,然后比较不同服务器上的两个数据库实例,这是可行的。我仍然希望有将项目模式与Db模式进行比较的选项,我认为这应该是可以工作的,不是吗? - bitshift
2
这种情况的一个问题是从服务器中撤销所做的更改并还原到项目中。这种情况会不时出现,当某人例如直接通过 SSMS 进行更改时,现在,您的项目模式不再反映目标,因为您无法真正将项目与数据库或数据库与项目进行比较,那么如何区分这些更改并将它们合并到您的项目中呢? - bitshift

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接