DECLARE @query varchar(MAX)
DECLARE @dbinstance varchar(200)
DECLARE @dbname varchar(200)
SET @dbinstance = 'this-is-servername\databaseinstancename'
SET @dbname = 'databasename'
SET @query = 'select column1, column2 from +@dbinstance+'.'+@dbname+'
EXEC(@query)
我收到以下错误
Msg 102,Level 15,State 1,Line 3 ' - '附近的语法不正确。
如果服务器名称有连字符,我们在变量中使用它?如果是这样,我可以解决这个问题,因为我不允许更改服务器名称,但必须在变量中使用它。
答案 0 :(得分:4)
您必须引用您的标识符:
[this-is-servername\databaseinstancename]
E.g。
SET @query = 'select column1, column2 from ['+@dbinstance+'].['+@dbname+']'
如果您的标识符可能包含]
,您还需要将其删除:
REPLACE(@identifier, ']', ']]')
另一种方法是在评论中使用内置的QUOTENAME
函数,如 Damien_The_Unbeliever 所示。
如果您的标识符不可信(例如用户输入),则必须转义它们以防止SQL注入。