因此,在Visual Studio 2013上使用SSDT,我可以指定数据库名称...
create view vSample1 as
select * from [$(RandomDatabase)].dbo.TableName
我也可以用四部分名称
来做到这一点create view vSample2 as
select * from [$(RandomServer)].[$(RandomDatabase)].dbo.TableName
但是当我尝试使用TableName执行此操作时,我会收到错误...
create view vSample3
select * from [$(RandomServer)].[$(RandomDatabase)].dbo.[$(RandomTable)]
它给我一个类似于
的错误Error: SQL71561: View: [vSample3] has an unresolved reference to object [$(RandomServer)].[$(RandomDatabase)].dbo.[$(RandomTable)].
我一直在查看项目设置中的SQLCMD变量窗口,并验证$(RandomTable)变量是否定义为TableName,但它仍然给我构建错误。
为什么会这样,我该如何解决?
由于
答案 0 :(得分:1)
我会使用同义词 - 创建一个与实际表匹配的表并创建指向该表的同义词,然后引用视图中的同义词或仅引用而不是视图。你需要这个,所以你可以编译它,你会得到像引用等好的东西。
然后,当您部署到每个服务器时,只需将正确的同义词部署到正确的服务器。
(然后在b& DD $中为您的供应商提供这样一个恼人的系统)
答案 1 :(得分:1)
我会使用前/后部署脚本来使用sp_executesql和动态查询创建此类视图。
exec sp_executesql N'create view vSample3 as
select * from [$(RandomServer)].[$(RandomDatabase)].dbo.[$(RandomTable)]'