web-dev-qa-db-fra.com

Erreur de syntaxe de requête SQL - Espaces dans les noms de champ

La base de données utilisée par mon application contient des noms de champs contenant des espaces. Je crois que ceci est la cause de mon problème. Voici une requête typique:

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

Comment gérer les espaces dans les noms de champs? Merci.

Informations complémentaires

Ceci permet d'accéder à une base de données créée avec MS Access 2007 (Microsoft.ACE.OLEDB.12.0).

10
Jim Fell

Je ne pense pas que vous puissiez utiliser des guillemets autour du nom de la table; seul le nom que vous lui attribuez. Je voudrais plutôt mettre le tableau entre crochets: [OV2 BAS]

Vous ne pouvez pas non plus mettre de guillemets autour de votre syntaxe de jointure. Essayez ceci à la place:

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

Remplacez ' par

  • postgreSQL, Oracle: "
  • MySQL `
  • Serveur SQL: [ et ]

Par exemple: "OV2 BAS", bas."Ref ID" = ids."Ref ID", etc.

9

Cela dépend du moteur de base de données que vous utilisez.
Pour SQL Server, vous devez mettre les noms de champs entre parenthèses: [ ]

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

Vous ne spécifiez pas quel SGBD vous utilisez, mais je devine SQL Server, donc

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

... mettez le nom du champ entre parenthèses. En utilisant des guillemets tels quels, vous transformez le nom du champ en chaîne simple, qui ne sera PAS traitée comme un nom de champ par le serveur SQL.

1
Marc B

Pour Microsoft Access, encapsulez les noms de champs contenant des espaces avec des ticks en arrière, par exemple. SELECT `Eng Units` FROM Table

1
Rob Bowman