• 締切済み

SQLの[ ] は?

ひとつどうしても気になる事があります。 Access97でSQL文を作ってるのですが、どうしても[]が 付くんです。 例えば 1:"SELECT [BACKUP-2].住所1 FROM [BACKUP-2]" って感じです。 別のテーブルは 2:"SELECT BACKUP-1.住所1 FROM BACKUP-1" で動きます。 これって何が違うのでしょうか?1は[ ]をとると 構文エラーとなって動いてくれません。 どうしても気になってしかたないのですが。 理由を教えてください。

みんなの回答

  • tak2003
  • ベストアンサー率32% (174/540)
回答No.3

ちなみに普通のRDBMSでは区別のときに[]は使わないですね。 MSのアクセス固有の表示だと思います。 アクセスのクエリを作るときに、ビルドを使うと思うのですが、テーブル名を指定してからフィールドを選択すると[]はつかないですよね。 テーブルやクエリを指定しないでフィールドを指定するときは[]でテーブルやクエリを指定しないとフィールドを指定できません。 これは[]で無理やりテーブルやクエリを指定できますよということだと思います。 (以前に作ったクエリーを使用しようとした場合、一度セーブしないと使えませんので注意してください。) アクセスはまだまだ訳のわからんエラーで落ちますので、こまめな保存が必要です。半日分の作業がなくなったりしますので注意してください。

BOLTS
質問者

お礼

たしかにアクセスって結構不安定な気がします。 いきなりテーブル参照が出来なくなったり過去何度 泣かされたことか。バックアップ気をつけます。 ありがとうございました。

回答No.2

テーブル名のハイフンが問題だと思われます。 テーブル名、フィールド名などに半角のハイフン(-)が用いられている場合 ACCESSのSQLはそれを名前の一部ではなく意味のある記号(つまりマイナス) と判断してしまいますので、半角ハイフンを含んだ名称を認識させるために 前後に [ ] をつける必要があり、ACCESSが自動的に付加する形になります。 半角スペースを含んだ名前なども同じですね。 (こちらはスペースの場所で名前が終わっていると見なされる) BACKUP-1の方のSQLが上手く動く理由は分かりませんが 長音(ー)や全角ハイフン(-)であれば単なる文字と見なされますし 外部のデータベースに接続するパススルークエリなどであった場合は SQLの文法が変わってくる事があります。

BOLTS
質問者

お礼

ずばりのご指摘ありがとうございます。 なんとか疑問解決です。 そんな細々したことがよくわかりません。 助かりました。

noname#25230
noname#25230
回答No.1

手元にACCESSが無いのでなんともいえませんが、同じくマイクロソフトの業務用データベースである「SQL Server」では、列の名前として「普通は使えなさそうな文字」、たとえば記号とか、が含まれる場合に、大括弧で囲むんだったと記憶しています。 もしかしたら、ハイフンか何かがそのままでは読んでもらえないので、自動的に括弧を付けてくれているのかな?とも思うのですが、片方ではうまくいくってのがよくわかりませんね。 でもまぁ、そのあたり、列名による現象ではないか?というアプローチで調べて見られてはいかがでしょうか?

BOLTS
質問者

お礼

ありがとうございます。 どうも2の-が普通の-と違ったみたいです。 1の-を消してみたら確かに消えました。 じゃあもう一個試したスラッシュも同じ理由なのでしょうね。 どうもそれらしいです。 ありがとうございました。

関連するQ&A