如何使用 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)]'
因此,在 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)]'