2009-05-27 7 views
0

私は、 "item"や "desc"(説明のための)などのカラムを持つレガシーデータベースを使っています。そのコンテキストで予約されている列名でソートするにはどうすればよいですか?

よう命じ選択やろうとしたときに明らかに問題があります:

SELECT item, desc FROM blah ORDER BY desc 

意図はコラム「DESC」の昇順ソートを行うことですが、DESCも修飾子ですので、SQLサーバーが混乱を注文する...フィールド名をエスケープして適切に動作させるにはどうすればよいですか?その列の2番目のコピーを別の名前として選択しなければならないのですか?

答えて

14

サラウンド角括弧とキーワードDESC:

SELECT item, [desc] FROM blah ORDER BY [desc] 
+6

リテラルとして予約されたキーワードを使用する必要があるすべての状況に当てはまります。 – Tomalak

0

選択b.item、何とかからb.descは、Bの順番としてb.desc ASCによって

私が間違っていました。 上記は間違っています。大括弧は行く方法です。

+0

なぜこれを下落させたのですか?たとえそれが "最良の"答えではないとしても、それは働きます... – GalacticCowboy

+0

それは考えても、それはレガシーコードを壊すでしょう(後で "desc"を検索し、 "b.desc"ではなく)。 descとb.descの両方を取得する方法を選択することが合法であれば、実行可能になる可能性があります。それは醜く不必要なように追求しなかった。 –

+0

ブライアン、 "それはレガシーコードを壊すだろう"という例を挙げることができますか? ベストプラクティスは、列名を常に修飾し、コードを分解することはないため、より堅牢にします。 http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/10/25/defensive-database-programming-qualifying-column-names.aspx –

関連する問題