SQL ステートメントで角括弧 [] はどのように使用されますか?
-
09-06-2019 - |
質問
Visual Studio 2008 が SQL の列名を角括弧で囲んでいることに気付きました。ブラケットには何か利点がありますか?私が T-SQL を手動でコーディングするとき、それらを気にしたことはありません。
例:ビジュアルスタジオ:SELECT [列 1]、[列 2] など...
私自身の方法:SELECT 列 1、列 2 など...
解決
列名または識別子にキーワードまたは特殊文字を使用する場合は、括弧が必要です。列に名前を付けることができます [First Name]
(スペースあり) -- ただし、その列を参照するたびに括弧を使用する必要があります。
新しいツールでは、念のため、または一貫性を保つために、どこにでも追加します。
他のヒント
列に SQL キーワードと同じ名前が付いている場合、または列にスペースが含まれている場合に便利です。
例:
create table test ( id int, user varchar(20) )
なんてこった!キーワード「user」付近の構文が正しくありません。しかしこれは:
create table test ( id int, [user] varchar(20) )
正常に動作します。
これらは、たとえば特定の文字を含む列名を (何らかの理由で) 使用している場合に便利です。
Select First Name From People
機能しませんが、列名を角かっこで囲むと機能します。
Select [First Name] From People
つまり、これはオブジェクト名を明示的に宣言する方法です。列、テーブル、データベース、ユーザーまたはサーバー。
列名には、クエリ実行エンジンを混乱させる文字や予約語が含まれる場合があるため、常に括弧で囲むことでこのような事態が発生するのを防ぎます。問題を確認してから対処するよりも簡単だと思います。
括弧は、列名が予約語である場合に使用できます。
制御していない列名のコレクションから SQL ステートメントをプログラムで生成している場合は、常に括弧を使用することで問題を回避できます。
さらに、一部のSharePointデータベースには、名前にハイフンが含まれています。SQL ステートメントで角括弧を使用すると、名前を正しく解析できます。
一貫性のためにそこに追加されていると思います...これらは列名にスペースまたは特殊文字が含まれている場合にのみ必要ですが、IDE が SQL を生成するときに常にこれらを含めた方がすっきりします。
予約語の使用を避ける命名規則に従っているにもかかわらず、Microsoft は新しい予約語を追加しています。括弧を使用すると、最初にクライアント コードから Microsoft の新たに予約された単語を編集する必要がなく、コードを新しい SQL Server バージョンにアップグレードできます。その編集は重大な懸念事項となる可能性があります。プロジェクトが早期に終了する可能性があります。
括弧は、スクリプト内のすべてを置換する場合にも役立ちます。バッチに @String という名前の変数と [String] という名前の列が含まれている場合、@String の名前を @NewString に変更せずに、列の名前を [NewString] に変更できます。
1990 年代の SQL の暗黒時代には、SQL 設計者が新機能の無限の雪崩に備えて辞書内の各単語をキーワードとして追加しようとしていたため、これは良い習慣であり、SQL3 ドラフトと呼ばれていました。
したがって、上位互換性が維持されます。
そして、これにはもう 1 つの素晴らしい副作用があることがわかりました。コード レビューやリファクタリングで grep を使用するときに非常に役立ちます。