在变量中使用连字符

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 行“-”附近的语法不正确。

如果服务器名称有连字符,我们不能在变量中使用它吗?如果是这样,是否有解决方法,因为我不允许更改服务器名称,但必须在变量中使用它。

Luk*_*der 5

您必须这样引用您的标识符:

[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 注入。