1

我们有几个数据库,比如 DB1、DB2、DB3 等。

它们必须具有相同的代码库,因此我们在 Visual Studio 2012 中使用 DB 项目,并根据项目与 UAT/Prod DB1 之间的比较生成用于部署的 SQL 脚本。然后将此脚本应用于 DB1-DBn。

在这个数据库项目的历史上,我第一次不得不创建一个包含硬编码数据库名称的函数,例如:

inner join DB1.schema.table1 as t1 on

现在,由于与该数据库引用有关的许多错误,无法构建项目或无法更新比较或生成脚本(禁用更新和生成脚本按钮),因为 VS 似乎认为 DB1 不存在。

我尝试添加一个项目级 SQLCMD 变量$(DB)并将其设置为DB1默认值并将其用作

inner join [$(DB1)].schema.table1 as t1 on

解决这些错误,但似乎没有任何区别。

编辑:

有人建议向自身添加一个循环项目引用,并将我试图手动添加的相同变量分配给它,但不确定如何实现。

4

1 回答 1

2

根据本文,应将参考添加到手动提取 .dacpac的文件中,如下所示:

.dacpac使用以下命令从目标数据库中提取文件:

"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120\sqlpackage.exe" /SourcePassword:p /SourceUser:u /Action:Extract /ssn:192.168.2.1 /sdn:DB1 /tf:DB1.dacpac

包括作为数据库参考。它自动分配了正确的 SQLCMD 变量名,错误消失了。

从源代码控制点来看,即使在将数据库引用添加到.dacpac文件时会自动创建 SQLCMD 变量,但它不会将文件添加到项目中。使用的.dacpac文件仍然必须作为现有项目添加到项目中,这有点蹩脚。在解决方案资源管理器中执行此操作时遇到错误,而必须通过团队资源管理器执行此操作,这在哪里起作用。

于 2015-11-09T20:47:57.350 回答