Ошибка синтаксиса SQL-запроса - пробелы в именах полей - PullRequest
10 голосов
/ 02 ноября 2011

База данных, используемая моим приложением, имеет имена полей, содержащие пробелы.Я считаю, что это является причиной моей проблемы.Вот типичный запрос:

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 ]

13 голосов
/ 02 ноября 2011

Я не думаю, что вы можете использовать кавычки вокруг фактического имени таблицы;только имя, которое вы назначаете ему.Вместо этого я бы заключил таблицу в квадратные скобки: [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';
9 голосов
/ 02 ноября 2011

Заменить ' на

  • postgreSQL, Oracle: "
  • MySQL `
  • SQL-сервер: [ и ]

Например: "OV2 BAS", bas."Ref ID" = ids."Ref ID" и т. Д.

2 голосов
/ 25 апреля 2017

Для Microsoft Access, оберните имена полей, которые содержат пробелы обратными галочками, например. SELECT `Eng Units` ИЗ таблицы

1 голос
/ 02 ноября 2011

Вы не указываете, какую СУБД вы используете, но я предполагаю, что SQL-сервер, поэтому

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

... заключить имя поля в скобки. Использование кавычек в том виде, в каком вы есть, превращает имя поля в простую строку, которая НЕ будет рассматриваться SQL-сервером как имя поля.

1 голос
/ 02 ноября 2011

Это зависит от используемого вами механизма базы данных.
Для 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';
...