webdevqa.jp.net

SQLクエリ構文エラー-フィールド名のスペース

私のアプリケーションが使用するデータベースには、スペースを含むフィールド名があります。これが私の問題の原因だと思います。典型的なクエリは次のとおりです。

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)で作成されたデータベースにアクセスするためのものです。

10
Jim Fell

実際のテーブル名を引用符で囲むことはできないと思います。割り当てた名前のみ。代わりに、テーブルを角かっこで囲みます:[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';
13
James Johnson

'をに置き換えます

  • postgreSQL、Oracle:"
  • MySQL `
  • SQLサーバー:[および]

例:"OV2 BAS"bas."Ref ID" = ids."Ref ID"など。

9

Microsoft Accessの場合、スペースを含むフィールド名をバックティックでラップします。テーブルから「英国工学単位系」を選択

2
Rob Bowman

これは、使用しているデータベースエンジンによって異なります。
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';
1

使用しているDBMSを指定していませんが、SQLサーバーを推測しているので

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

...フィールド名を角かっこで囲みます。引用符をそのまま使用すると、フィールド名がプレーンな文字列に変換されます。これは、SQLサーバーではフィールド名として扱われません。

1
Marc B