我有一个VisualStudioSQL项目,需要将sqlcmd参数设置为链接服务器的值。
假设项目中有以下查询:
select * from tableName
我需要将此更改为:
select * from [$(linkedServer)].tableName
其中linkedserver=servername.dbname.dbo这将转换为:
select * from [serverName.dbName.dbo].tableName
导致错误:
对象名“servername.dbname.dbo.tablename”无效。
但是,以下查询已成功运行: select * from serverName.dbName.dbo.tableName
.
有没有办法移除支架或其他解决方法?括号是必需的,因为值是作为sqlcmd参数传递的。
1条答案
按热度按时间lndjwyie1#
为什么
[serverName.dbName.dbo].tableName
失败是因为sql将处理[
以及]
作为单个标识符。所以它在寻找一个叫做tableName
在一个叫做serverName.dbName.dbo
.填充sqlcmd变量时,请使用方括号将其填充到位,以便生成有效的4部分名称:
[serverName].[dbName].[dbo].tableName
针对自动部署/visual studio intellisense的情况进行编辑:如果您是通过script vs generates执行自动部署替换,那么可以为链接的服务器和数据库创建单独的变量,也可以保留一个变量,并通过使用带引号的标识符来“欺骗”系统。将变量设置为
serverName”.”dbName"."dbo
(注意-没有开始引用,引用句点的两边),并且在脚本中使用"$(linkedServer)"