SQLステートメントで角かっこ[]の使用は何ですか?


163

Visual Studio 2008がSQLの列名を角括弧で囲んでいることに気付きました。ブラケットは何か利点がありますか?T-SQLを手作業でコーディングするとき、私はT-SQLを気にすることはありませんでした。

例:

Visual Studio:

SELECT [column1], [column2] etc...

私自身の方法:

SELECT column1, column2 etc...

手作業でコーディングしたSQLでブラケットが不要になったことは良いことです。データベースの命名規則では、ブラケットが必要な名前を除外する必要があります。
クリスチャンオダード2008

関連する回答では、QUOTED_IDENTIFIERの設定について説明しています。stackoverflow.com/ questions / 19657101 /
Jared Beck

8
角かっこはマイクロソフトの癖だと付け加えるかもしれません。SQL標準では、実際には"Microsoft サポートする二重引用符()を使用しています。すべてを区切る必要があるとマイクロソフトが感じた場合は、代わりに標準の二重引用符を使用する方がよいでしょう。しかし、別のDBMSへの移植が簡単になりすぎて、決して実行されなかったと思います…
Manngo

回答:


181

列名または識別子にキーワードまたは特殊文字を使用する場合は、角かっこが必要です。[First Name](スペースを含む)列に名前を付けることもできますが、その列を参照するたびに角かっこを使用する必要があります。

新しいツールは、念のため、または一貫性のために、どこにでもそれらを追加します。


3
これが角括弧の唯一の目的ですか?

1
@mehow、それそのように思えますが、私はそのことを明示的に示すリファレンスを持っていません。
Michael Haren 2013


2
sqlはまた、selectクエリのlike演算子で角括弧を使用して、正規表現を使用して結果を制限します。codeproject.com/Articles/33941/SQL-LIKE-Operator
Jens Frandsen

2
呼び出される列名を定義することもできますselectselect select from mytable、エラーがスローされるためselect [select] from mytable、有効なクエリになります。SQL管理スタジオでカラフルになる単語は、列/テーブル/ sp /などの名前として使用する場合は、角かっこで囲む必要があります。MySQLでは、角度付きの単一引用符 `` ``はこれと同等です。
バリーグベンカヤ2017

59

列の名前がSQLキーワードと同じである場合、またはスペースが含まれている場合に便利です。

例:

create table test ( id int, user varchar(20) )

大野!キーワード「user」の近くに不正な構文があります。しかしこれは:

create table test ( id int, [user] varchar(20) )

正常に動作します。


@Blordbeardは、これはMicrosoft SQL Serverに固有のものですか、それとも角括弧もOracle、mySQL、PostgreSQLなどで同じように機能しますか?
user3700562

4
ブラケットは標準SQLではなく、すべてのDBエンジンが使用する文字がわかりません。たとえば:MySQLはバッククォートを使用しています。stackoverflow.com/questions/2889871/...
Blorgbeardが出ている

12

たとえば、何らかの理由で特定の文字を含む列名を使用している場合に役立ちます。

Select First Name From People

機能しませんが、列名の前後に角括弧を置くと機能します

Select [First Name] From People

つまり、オブジェクト名を明示的に宣言する方法です。列、テーブル、データベース、ユーザーまたはサーバー。


6

列名には、クエリ実行エンジンを混乱させる文字や予約語を含めることができるため、常に括弧で囲むことでこれが発生するのを防ぎます。問題を確認して対処するよりも簡単だと思います。


5

大括弧は、列名が予約語である場合に使用できます。

制御できない列名のコレクションからSQLステートメントをプログラムで生成する場合は、常に角かっこを使用することで問題を回避できます。


5

予約語の使用を回避する命名規則に従うかどうかに関係なく、Microsoftは新しい予約語を追加します。角かっこを使用すると、最初にクライアントコードからMicrosoftの新しく予約された単語を編集する必要なく、コードを新しいSQL Serverバージョンにアップグレードできます。その編集は大きな懸念事項になる可能性があります。プロジェクトが早期に終了する可能性があります...

ブラケットは、スクリプト内のすべてを置き換えたい場合にも役立ちます。バッチに@Stringという名前の変数と[String]という名前の列が含まれている場合、@ Stringの名前を@NewStringに変更することなく、列の名前を[NewString]に変更できます。


5

1990年代のSQLの暗黒時代には、SQL設計者が新機能の無限の雪崩のキーワードとして辞書の各単語を追加しようとし、それをSQL3ドラフトと呼んだため、これは良い習慣でした。

したがって、上位互換性が維持されます。

そして、私はそれが別の素晴らしい副作用を持っていることを発見しました、それはあなたがコードレビューとリファクタリングでgrepを使用するときに大いに役立ちます。


4

さらに、一部のSharepointデータベースでは、名前にハイフンが含まれています。SQLステートメントで角括弧を使用すると、名前を正しく解析できます。


3

一貫性を保つために追加されていると思います...列名にスペースまたは特殊文字が含まれている場合にのみ必要ですが、IDEがSQLを生成するときは常にそれらを含めるだけの方がクリーンです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.