2011-11-02 15 views
9

Il database utilizzato dalla mia applicazione ha nomi di campi contenenti spazi. Credo che questa sia la causa del mio problema. Ecco una query tipica:Errore di sintassi SQL Query - Spazi nei nomi di campo

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

Come si gestiscono gli spazi nei nomi dei campi? Grazie.

Informazioni aggiuntive

Questo è quello di accedere a un database realizzato con MS Access 2007 (Microsoft.ACE.OLEDB.12.0).

+1

Che tipo di RDBMS stai utilizzando? –

+0

Si tratta di accedere a un database creato con MS Access 2007 (Microsoft.ACE.OLEDB.12.0). –

risposta

12

Non penso che sia possibile utilizzare le virgolette attorno al nome effettivo della tabella; solo il nome che gli hai assegnato. Vorrei invece racchiudere il tavolo tra parentesi: [OV2 BAS]

Inoltre, non è possibile inserire virgolette nella sintassi di unione. Prova invece:

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

Sostituire ' con

  • PostgreSQL, Oracle: "
  • MySQL `
  • SQL-server: [ e ]

Ad esempio: "OV2 BAS", bas."Ref ID" = ids."Ref ID", ecc

+0

+1 come delimitare tablename e nome colonna insieme sembra decisamente sbagliato. Anche se indovino i backtick piuttosto che le virgolette basate sul delimitatore usato nella domanda. –

1

Dipende dal motore di database che si sta utilizzando.
Per SQL Server, bisogna mettere i nomi dei campi tra parentesi: [ ]

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

Serve per accedere a un database creato con MS Access 2007 (Microsoft.ACE.OLEDB.12.0). –

1

Non si specifica che DBMS si sta utilizzando, ma sto cercando di indovinare SQL Server, in modo da

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

... racchiudere il nome del campo tra parentesi. Usando le virgole come sei, trasforma il nome del campo in una stringa semplice, che NON sarà trattata come un nome di campo dal server SQL.

+0

Serve per accedere a un database creato con MS Access 2007 (Microsoft.ACE.OLEDB.12.0). –

+0

Ok. le staffe lavoreranno anche lì. Prendi in considerazione la possibilità di rinominare i tuoi campi in modo che non ci siano spazi in loro, se puoi: i nomi distanziati provocheranno dolore lungo la strada (come stai ora trovando). –

+0

È necessario rimuovere definitivamente i nomi dei campi nella clausola JOIN - i nomi dei campi di quotatura li trasformano in stringhe e NON verranno trattati come nomi di campo. '... ON bas. [Ref ID] = id. [Ref ID]' –

0

Per Microsoft Access, raggruppare i nomi dei campi che contengono spazi con tick indietro, ad es. SELEZIONA `Unità di misura` FROM Tabella

Problemi correlati