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

问题描述:

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

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)做了一个数据库。

+1

您使用的是什么RDBMS? –

+0

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

我不认为你可以在实际的表名称周围使用引号;只有你分配给它的名字。我会用括号括起来:[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'; 

  • PostgreSQL里,甲骨文替换'"
  • MySQL的`
  • SQL服务器:[]

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

+0

+1作为分隔表名和列名肯定看起来不对。虽然我猜反引号,而不是根据问题中使用的分隔符引号。 –

这取决于您正在使用的数据库引擎。
对于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'; 
+0

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

你没有指定你使用的DBMS,但我猜SQL服务器,所以

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

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

+0

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

+0

好的。括号也会在那里工作。考虑重命名你的领域,所以如果你可以的话,他们中没有空格 - 间隔的名字会引起痛苦(就像你现在发现的那样)。 –

+0

您必须在JOIN子句中取消引用字段名称 - 引用字段名称将它们转换为字符串,并且不会将其视为字段名称。 '... ON bas [Ref ID] = ids。[Ref ID]' –

对于Microsoft Access,将包含空格的字段名用换行符(例如, SELECT`Eng Units` FROM Table