从包含特殊字符的名称的数据库中选择

时间:2015-08-20 17:56:41

标签: sql sql-server sql-server-2008 sql-server-2008-r2

我有一些数据库,其名称包括 029jdfj-jh73jsd-hsdjhd7 uew723-73823n-783nd 。当我尝试运行select语句时,抛出以下错误:

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '029jdfj'.
Msg 102, Level 15, State 1, Line 4
Incorrect syntax near 'uew723'.

如何从这些数据库中进行选择?

选择语句:

select Name from 029jdfj-jh73jsd-hsdjhd7.dbo.Names where Name like 'JWS Tech' or select Name from uew723-73823n-783nd.dbo.Names where Name like 'JWS Tech'

2 个答案:

答案 0 :(得分:0)

在非正统名称周围使用方括号:

select Name from [029jdfj-jh73jsd-hsdjhd7].dbo.Names where Name like 'JWS Tech'
select Name from [uew723-73823n-783nd].dbo.Names where Name like 'JWS Tech'

有关何时以及为何需要以这种方式划分标识符的详细信息,请参见here

  

不符合所有标识符规则的标识符必须在Transact-SQL语句中分隔。

答案 1 :(得分:0)

select Name 
from [029jdfj-jh73jsd-hsdjhd7].dbo.Names 
where Name like '%JWS Tech%' 
UNION
select Name
from [uew723-73823n-783nd].dbo.Names
where Name like '%JWS Tech%'

您应该使用union代替or来合并2个结果集。 使用%查找模式时,也请使用like。此外,如果您的模式名称以数字开头,请更好地使用[],如@sstan在答案中所述。