s-a*_*a-n 2 sql t-sql sql-server
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)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
消息 102,级别 15,状态 1,第 3 行“-”附近的语法不正确。
如果服务器名称有连字符,我们不能在变量中使用它吗?如果是这样,是否有解决方法,因为我不允许更改服务器名称,但必须在变量中使用它。
您必须这样引用您的标识符:
[this-is-servername\databaseinstancename]
Run Code Online (Sandbox Code Playgroud)
例如
SET @query = 'select column1, column2 from ['+@dbinstance+'].['+@dbname+']'
Run Code Online (Sandbox Code Playgroud)
如果您的标识符可能包含]您还需要转义:
REPLACE(@identifier, ']', ']]')
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用评论中Damien_The_Un believerQUOTENAME指出的内置函数。
如果您的标识符不可信(例如用户输入),您必须转义它们以防止 SQL 注入。