在变量中使用连字符

时间:2014-07-15 07:21:04

标签: sql sql-server tsql

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

如果服务器名称有连字符,我们在变量中使用它?如果是这样,我可以解决这个问题,因为我不允许更改服务器名称,但必须在变量中使用它。

1 个答案:

答案 0 :(得分:4)

您必须引用您的标识符:

[this-is-servername\databaseinstancename]

E.g。

SET @query = 'select column1, column2 from ['+@dbinstance+'].['+@dbname+']'

如果您的标识符可能包含],您还需要将其删除:

REPLACE(@identifier, ']', ']]')

另一种方法是在评论中使用内置的QUOTENAME函数,如 Damien_The_Unbeliever 所示。

如果您的标识符不可信(例如用户输入),则必须转义它们以防止SQL注入。