【发布时间】:2019-03-03 21:23:37
【问题描述】:
我们有一个数据库项目,该项目在另一个数据库的表上具有连接。由于其他数据库名称可能会更改,因此对其他数据库的引用使用 sqlcmd 变量进行引用,即我们为其设置了部署参数的inner join [$(otherdb)].Table1 ...。
现在,我正在尝试使这个项目可以部署到本地 SQL Server 实例,供我们作为开发人员使用,并且我希望不必在同一台机器上部署引用的数据库。因此,我有条件地 ($(IsLocal)='true') 设置链接服务器以指向我们的开发 SQL DB 服务器,并且仅对于本地部署,我试图将 $(otherdb) 变量设置为具有:linkedserver.otherdb 而不仅仅是otherdb。
这适用于带有链接服务器的 SQL 并手动执行实际查询,但似乎不适用于基于 sqlcmd 模式的部署。事实证明,方括号按照[linkedserver.otherdb].Table1(而不是[linkedserver].[otherdb].Table1)的行进行输出,如果我只是删除方括号(linkedserver.otherdb.Table1),我会收到数据库项目的构建时错误,说语法无效.所以方括号必须在那里,但完全限定的嵌套名称使其无效。
我还尝试使用linkedserver].[otherdb 的sqlcmd 变量值来生成[linkedserver].[otherdb].[Table1] 的查询。当我尝试执行 sqlcmd 时,这也适用于 SQL,但是当 Visual Studio 生成脚本时,它会添加一个额外的 ] 导致:
:setvar otherdb "linkedserver]].[otherdb"
如果我删除了额外的],它确实可以工作,但是如果没有 cmd 或 PowerShell 脚本,就无法在 T-SQL 脚本中干预这个生成的输出。 (有吗?)
我可以使用其他方法吗?
【问题讨论】:
标签: sql-server visual-studio sqlcmd