如何使用 SQLCMD 变量定义 table 名称?

How do I use an SQLCMD variable to define a table name?

因此,在 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 变量 window,并验证了 $(RandomTable) 变量被定义为 TableName,但它仍然给我构建错误。

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

谢谢

我会使用同义词 - 创建一个与实际 table 匹配的 table 并创建一个指向它的同义词,然后在视图中引用同义词或仅引用而不是视图。你需要这个,这样你就可以编译它,你会得到一些好东西,比如参考资料等。

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

(然后把你的供应商踢进 b&DD$ 这么烦人的系统)

我会使用 pre/post 部署脚本来使用 sp_executesql 和动态查询创建这样的视图。

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