如何使用SQLCMD变量定义表名?

时间:2015-04-09 20:29:51

标签: tsql visual-studio-2013 sql-server-data-tools

因此,在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,但它仍然给我构建错误。

为什么会这样,我该如何解决?

由于

2 个答案:

答案 0 :(得分:1)

我会使用同义词 - 创建一个与实际表匹配的表并创建指向该表的同义词,然后引用视图中的同义词或仅引用而不是视图。你需要这个,所以你可以编译它,你会得到像引用等好的东西。

然后,当您部署到每个服务器时,只需将正确的同义词部署到正确的服务器。

(然后在b& DD $中为您的供应商提供这样一个恼人的系统)

答案 1 :(得分:1)

我会使用前/后部署脚本来使用sp_executesql和动态查询创建此类视图。

exec sp_executesql N'create view vSample3 as
select * from [$(RandomServer)].[$(RandomDatabase)].dbo.[$(RandomTable)]'