2011-11-02 43 views
9

La base de datos que usa mi aplicación tiene nombres de campo que contienen espacios. Creo que esta es la causa de mi problema. Aquí está una consulta típica:Error de sintaxis de consulta SQL - Espacios en nombres de campos

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

¿Cómo trato los espacios en los nombres de los campos? Gracias.

Información adicional

Ésta es acceder a una base de datos hecha con MS Access 2007 (Microsoft.ACE.OLEDB.12.0).

+1

¿Qué RDBMS estás usando? –

+0

Esto es para acceder a una base de datos creada con MS Access 2007 (Microsoft.ACE.OLEDB.12.0). –

Respuesta

12

No creo que pueda usar comillas alrededor del nombre real de la tabla; solo el nombre que le asignas. Me gustaría envolver la tabla entre paréntesis en su lugar: [OV2 BAS]

Tampoco puede poner comillas alrededor de su sintaxis de unión. Pruebe esto en su lugar:

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

Reemplazar ' con

  • PostgreSQL, Oracle: "
  • MySQL `
  • SQL-servidor: [ y ]

Por ejemplo: "OV2 BAS", bas."Ref ID" = ids."Ref ID", etc.

+0

+1 como nombre de tabla delimitadora y nombre de columna definitivamente parece incorrecto. Aunque estoy adivinando backticks en lugar de citas basadas en el delimitador utilizado en la pregunta. –

1

Eso depende del motor de base de datos que está utilizando.
Para SQL Server, tiene que poner los nombres de campo entre paréntesis: [ ]

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

Esto es para acceder a una base de datos creada con MS Access 2007 (Microsoft.ACE.OLEDB.12.0). –

1

Usted no se especifica qué DBMS que está utilizando, pero supongo servidor SQL, así

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

... encierre el nombre del campo entre corchetes. Al usar comillas tal como está, se convierte el nombre del campo en una cadena simple, que NO será tratada como un nombre de campo por el servidor SQL.

+0

Esto es para acceder a una base de datos creada con MS Access 2007 (Microsoft.ACE.OLEDB.12.0). –

+0

Ok. los corchetes también funcionarán allí. Considere renombrar sus campos para que no haya espacios en ellos si puede: los nombres espaciados causarán dolor en el camino (como lo está encontrando ahora). –

+0

También tendrá que desmarcar los nombres de los campos en la cláusula JOIN: al citar los nombres de los campos, los convierte en cadenas y NO se tratarán como nombres de campo. '... ON bas. [Ref ID] = ids. [Ref ID]' –

0

Para Microsoft Access, ajuste los nombres de los campos que contengan espacios con marca de retroceso, p. SELECCIONA `Eng Units` FROM Table

Cuestiones relacionadas