プロが教える店舗&オフィスのセキュリティ対策術

テーブル名を[]でくくらないとエラーになってしまいます

sqlserver 2008 express edition を利用しているのですが

テーブル名 やカラム名に[]でくくってSQL文を実行しないと
エラーが出てしまいます
例えば

select * from [table]  の様にしないといけません
これを
select * from table で実行できるようにしたいのです
どうしたらいいのでしょうか

会社ではsqlserver2005を利用しているので
2008からは[]でくくる必要になったのでしょうか

それとも初期設定で何かしないといけないのでしょうか
設定方法を教えて下さい

sqlserver management studio2008もインストール済みです

A 回答 (3件)

「table」はSQLの予約語です。

そのため初期設定などで、「table」をそのままSQL文に使用することは出来ません。これは他のRDBも同様です。
SQL SERVERでは[]で括ることで、予約語をオブジェクト名に出来ますが、おすすめは出来ません。
なお、ANSI/ISOの標準規格では「"(ダブルクォーテーション)」で括ることで、同様にエラーを回避できます。SQL SERVERでも初期設定でANSI/ISOと同様に「"」で括るモードにすることは出来ますが、それでも予約語である以上何らかの対応は必要です。

> 会社ではsqlserver2005を利用しているので
> 2008からは[]でくくる必要になったのでしょうか

そんなことはないはずです。
    • good
    • 0

予約後だけではなく、命名規則に反したテーブルも[]でくくれば作成できてしまいます。


当然、命名規則に反するのでselectする際もエラーになりますが、select時にも[]でくくればアクセス可能です。

あと、エラーがでるならエラーコードや内容や、本当に発行しているSQL(再現するもの)を書きましょう。
予約語が原因なのか命名規則に反するのか想定でしか書けません。
select * from tableはサンプルなのでしょうか。それでは予約語と突っ込みが入るのはしかたがありません。 

create table 111 (a char(1))
メッセージ 102、レベル 15、状態 1、行 1
'111' 付近に不適切な構文があります。

create table [111] (a char(1))
コマンドは正常に完了しました。


select * from 111
メッセージ 102、レベル 15、状態 1、行 1
'111' 付近に不適切な構文があります。

select * from [111]
(0 行処理されました)

当然、数字のみのオブジェクトは命名規則に反します。
    • good
    • 0

何で予約語をテーブル名にしてるの?


そこが信じられません。
以下のページに、こう書いてあります。
…Transact-SQL スクリプトで、SQL Server の予約済みキーワードを識別子およびオブジェクト名として使用することは構文的に可能ですが、これは識別子を区切って使用するときに限られます。

予約済みキーワード (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms189822 …

| それとも初期設定で何かしないといけないのでしょうか
| 設定方法を教えて下さい
初期設定も何も、予約語を使うなと書いてあるのですから、名前を変更するしか手はないです。
これは2005でも2008でも変わっていません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A