2009-04-23 5 views
10

自身のために参照してください:世界でこれを可能にするための根拠であるスペースがSqlServerの有効な列名であるのはなぜですか?

create table #temp ([ ] varchar(1)) 
insert into #temp values ('1') 
select [ ] from #temp 

何?

+0

これは興味深いものです。そのようなクールなことを指摘するために+1 ... –

+2

これは今から5年後にアプリケーションを維持するいくつかの貧弱な樹液をねじ込む方法です!私はちょうど彼らがいくつかの動的なクエリとデータがどこから来ているのか理解しようとしている彼らの髪を引き出すのを見ることができます。それはGOTO TOPと似ていますが、一番下に「トップ」を置くか、Fiveという名前の変数を宣言して5に設定しますが、他の場所に値を変更します。 –

答えて

10

はこの 機能を妨げることは価値がありますか?

SQLは内部的にどのようにコード化されているのかわかりませんが、これを許可しないようにするためにはもっと努力が必要と思われます。

+0

今これはいいです:)私はあなたの正当化が好きです+1 –

+0

十分に公正。あなたはおそらくそれを防ぐためにもっと努力しています。 –

9

私は複雑なクエリをデバッグするときに、プレースホルダ/セパレータとして常に使用します。

SELECT a.*, ' ' as [ ], b.* 
FROM a 
LEFT JOIN b on ... 

私は簡単に1が停止し、他の開始結果に表示することができますので、私は2つのテーブル間の空白部分を取得し、この方法:私はこのような何かがあるかもしれません。

その後、必要な結果とパフォーマンスが得られたら、私が気にする列だけを使用するようにselect句を変更します。

つまり、私は列名に何か他のものを使用できない理由はないと思います。私は根拠はの線に沿ってより多くのだと思います

+1

+1私の迷惑のためのちょっとしたトリックありがとう – JoshBerke

2

スペースは他の文字と同じようです。 []という名前のテーブルを作成することもできます。 (私はそれを試して、それが働いた。)私は単にこれに制限がないと思う。

+0

テーブルも? Yikes。それを試みるとは思わなかった。 –

4

[0121]の間に任意の有効な文字を使用して、カラム&のテーブル名を定義できます。 [A列]のようなものが有効であれば(スペースで)、列名として単一のスペースを使用することはできません。

ただし、末尾のスペースは削除されます。

[ ] and [ ] (1 & 2 spaces)
は両方

 
[ ] (1 space). 
+0

「けれども...」の部分は引用であるのか、それとも単に書式化されているのでしょうか?引用の場合は、リンクを追加してください。 – Tomalak

+0

私は答えを更新しましたが、しかし、引用ではない、私はちょうど前のタグを台無しにしました。 – Steven

4

一部の人々が列名にスペースを持って好きなようにスペースが、許容可能な文字であるとして扱われます。そして、それが列名の一部である可能性がある場合、列名自体はなぜですか?

どうして私は謎に包まれているのですか?プログラミングが非常に難しくなり(常にすべてを ""または[]で囲む)私は実際に疑問符を持つ列名を見ましたが、これは間違いなくすべての識別子で使用することを避けていますが、それでも可能です。

+0

Ack!ある意味では、それはさらに悪いことです。 –

2

私は潜在的に危険な機能で自分自身を傷つけないよう十分に責任があると私は親切に感謝します。私はオブジェクト名のスペースのために正当な理由は見つけられませんでしたが、場合によっては普及しているようです。これははさみで走る極端な例です。

関連する問題