2012-03-28 9 views
18

私は、既存のレコードのある既存のデータベースのコピーを持っています。私がテーブルデザイナーと一緒に遊んでいて、カラム名のいくつかに[]があることに気づいたとき。それらはすべて任意のタイプ(float、datetime、netext、nvarcharなど)であるように見えますが、[]を取り除くカラムプロパティには何もありません。私は[]を削除する名前を変更しようとしましたが、私は編集を終了するとすぐにreappaears。MS-SQLテーブルデザイナの角括弧[]の意味?

this投稿によると、xml列のキーワード列ですか?これらの列はいずれもxml列ではありません。誰かがこれの目的をms-sqlの初心者に親切に説明しますか?ありがとう

答えて

39

角括弧[]は、識別子を区切るために使用されます。これは、列名が予約済みのキーワードであるか、スペースやハイフンなどの特殊文字を含む場合に必要です。

角括弧を使用しない場合でも、角括弧を使用するユーザーもいます。 MSDNから

区切り識別子

は、二重引用符( ")または括弧([])で囲まれた識別子の形式のルールを遵守識別子を得るか、または。

SELECT * 
FROM [TableX]   --Delimiter is optional. 
WHERE [KeyCol] = 124 --Delimiter is optional. 

識別子のすべての規則に準拠しない識別子は、区切りでなければなりませんdをTransact-SQLステートメントに追加します。

SELECT * 
FROM [My Table]  --Identifier contains a space and uses a reserved keyword. 
WHERE [order] = 10 --Identifier is a reserved keyword. 
+2

角括弧を使用することができます(これらは、任意の識別子ではなく引用することができ、一般的に良い習慣ですちょうど列。) –

+0

でも意味があります。 '[]'を持つすべてのカラム名の名前も 'space'です。しかし、 'space 'と' []'を手動で削除することによって、テーブルデザイナーは '[]'を自動的に追加しますか? – Bonk

+1

@YonkShi一貫性のために、おそらくそうではありません(キーワードと矛盾するか、特殊文字などがあるか心配する必要はありません)。そのような設定を無効にする*世代オプション*(グローバル設定など)がない限り、それはそのままです。 –

1

ブラケットは、明示的に情報を区切るために使用されているSQL Serverの中の特殊文字です。

これらは記事ごとにxmlで使用できますが、スペースやその他のキーワードを含むメタ名(列、表など)を指定するためにも使用できます。

declare my column nvarchar(50) 

は無効な構文になりますが、あなたは

declare [my column] nvarchar(50) 

ちょうど明白な区切り文字と考えるに行うことができます。

4

角カッコ(例えばビュー、データベース、列など)

マークは、そのようなスペースやピリオドなどの特殊文字が干渉しないようにオブジェクトをカプセル化するために、上述したよう彼らの主な目的は、ある

オブジェクトの周囲に配置することができますあなたの構文で。

多くのアプリケーションでは、構文エラーやそのような種類のリスクをさらに減らすために、角括弧付き表記を使用しています。

それは空白いずれの場合においても

Database_Name < GOOD PRACTICE 

Database Name < GENERALLY TRY TO AVOID 

が含まれていないし、後者が使用されている場合、あなたはすなわち

select * from [Database Name] 
+1

+1です。 – onedaywhen

関連する問題