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】:将'
替换为
"
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 查询语法错误 - 字段名称中的空格的主要内容,如果未能解决你的问题,请参考以下文章