2015-11-09 93 views
0

我们有几个数据库,比如DB1,DB2,DB3等。如何从VS DB项目中引用另一个DB?

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

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

inner join DB1.schema.table1 as t1 on 

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

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

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

解决的错误,但它似乎没有任何区别。

编辑:

有人建议,以圆形项目引用添加到自身,并分配给它,我试图手动添加,不知道如何实现这一目标相同的变量。

回答

0

按本article参考应该被添加到一个手动提取.dacpac文件如下:从targed DB

提取.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文件仍然必须作为现有项目添加到项目中,这是一种跛脚。在解决方案资源管理器中这样做,我遇到了一个错误,必须通过团队资源管理器来完成,而不是在那里工作。