我们有几个数据库,比如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
解决这些错误,但似乎没有任何区别。
编辑:
建议添加一个循环项目引用给自己,并为其分配我试图手动添加的相同变量,不知道如何实现。
答案 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
文件仍然必须作为现有项目添加到项目中,这有点蹩脚。在解决方案资源管理器中执行此操作时,我遇到了一个错误,并且必须通过团队资源管理器执行此操作,而不是在那里工作。