SQL 查询语法错误 - 字段名称中的空格

Posted

技术标签:

【中文标题】SQL 查询语法错误 - 字段名称中的空格【英文标题】:SQL Query Syntax Error - Spaces in Field Names 【发布时间】:2011-11-02 16:48:05 【问题描述】:

我的应用程序使用的数据库具有包含空格的字段名称。我相信这是我的问题的原因。这是一个典型的查询:

SELECT * FROM 'OV2 BAS' AS bas 
INNER JOIN 'OV2 RefID' AS ids ON 'bas.Ref ID' = 'ids.Ref ID' 
WHERE ids.ENUM_H = 'TDischarge';

如何处理字段名称中的空格?谢谢。

其他信息

这是为了访问使用 MS Access 2007 (Microsoft.ACE.OLEDB.12.0) 创建的数据库。

【问题讨论】:

这是为了访问使用 MS Access 2007 (Microsoft.ACE.OLEDB.12.0) 创建的数据库。 【参考方案1】:

我认为您不能在实际表名周围使用引号;只有您分配给它的名称。我会将表格放在括号中:[OV2 BAS]

您也不能在连接语法周围加上引号。试试这个:

SELECT * FROM [OV2 BAS] AS bas INNER JOIN [OV2 RefID] AS ids ON bas.[Ref ID] = ids.[Ref ID] WHERE ids.ENUM_H = 'TDischarge';

【讨论】:

【参考方案2】:

' 替换为

postgreSQL,甲骨文:" mysql ` SQL 服务器:[]

例如:"OV2 BAS"bas."Ref ID" = ids."Ref ID"

【讨论】:

+1 作为分隔表名和列名一起肯定看起来是错误的。虽然我根据问题中使用的分隔符猜测反引号而不是引号。【参考方案3】:

对于 Microsoft Access,包含带有反引号的空格的字段名称,例如从表中选择“英制单位”

【讨论】:

【参考方案4】:

这取决于您使用的数据库引擎。 对于 SQL Server,您必须将字段名称放在括号中:[ ]

SELECT * FROM [OV2 BAS] AS bas 
INNER JOIN [OV2 RefID] AS ids ON bas.[Ref ID] = ids.[Ref ID]
WHERE ids.ENUM_H = 'TDischarge';

【讨论】:

这是为了访问使用 MS Access 2007 (Microsoft.ACE.OLEDB.12.0) 创建的数据库。【参考方案5】:

您没有指定您使用的是哪个 DBMS,但我猜是 SQL 服务器,所以

SELECT *
FROM [OV2 BAS] AS bas
     ^^^^^^^^^

... 将字段名称括在括号中。按原样使用引号,将字段名称转换为纯字符串,SQL Server 不会将其视为字段名称。

【讨论】:

这是为了访问使用 MS Access 2007 (Microsoft.ACE.OLEDB.12.0) 创建的数据库。 好的。括号也可以在那里工作。考虑重命名您的字段,如果可以的话,其中没有空格 - 带空格的名称会在路上造成痛苦(正如您现在所发现的那样)。 您还必须取消引用 JOIN 子句中的字段名称 - 引用字段名称会将它们转换为字符串,并且它们不会被视为字段名称。 ` ... ON bas.[Ref ID] = ids.[Ref ID]` 你为什么说“带空格的名字会在路上造成痛苦”?只要你引用你的字段名(你应该总是这样做),就可以了。 @rjmunro “只要你引用,你应该没问题” 这正是问题所在。不是每个人都这样做。 Marc B 是正确的:在字段名称中放置空格不是最佳做法。

以上是关于SQL 查询语法错误 - 字段名称中的空格的主要内容,如果未能解决你的问题,请参考以下文章

组合查询时的 SQL-server 语法错误(传递查询)

通过 Excel VBA 进行 SQL 查询的复杂 JOIN 子句中的语法错误

SQL:加入语法错误

MS Access SQL 语法错误

带有子查询的 redshift sql 查询中的语法错误

sql语句在查询分析器中能执行,但是程序却不能执行,一直报错order by 附近有语法错误