如何从VS DB项目引用另一个数据库?

时间:2015-11-09 18:53:41

标签: visual-studio-2012 sql-server-2012 schema-compare

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

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

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

inner join DB1.schema.table1 as t1 on

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

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

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

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

编辑:

建议添加一个循环项目引用给自己,并为其分配我试图手动添加的相同变量,不知道如何实现。

1 个答案:

答案 0 :(得分:0)

根据此article,应将引用添加到手动提取的 .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文件仍然必须作为现有项目添加到项目中,这有点蹩脚。在解决方案资源管理器中执行此操作时,我遇到了一个错误,并且必须通过团队资源管理器执行此操作,而不是在那里工作。