2012-02-07 12 views
3

私は最後のポジションでこれをしないと言われました。それはなぜ説明されなかった。私はそれが間違いの可能性を高めていると理解していますが、列の数が2つしかなく、順序が間違っている場合は、省略して列名を明示的に一致させることなく正しい順序で値を挿入できません?パフォーマンスに大きな違いはありますか?もしそうなら、それは小規模で重要ですか?クエリの挿入:列名を含めないのはなぜ悪い考えですか?

パフォーマンスヒットがなく、他の人が表示するために保存されるクエリでない場合は、どうすればよいですか?

ありがとうございます。

+0

当然のことながら、私はこれをしなかったし、それは私が、実際には、これらのスクリプトを保存する必要がないことが判明します。今私はそれらを適切に書き直さなければならない。コーディングカルマはもう一度かむ! – Yatrix

答えて

4

これは、対話型DBツールに手動でクエリを入力した場合にのみ受け入れられます。プログラムによってSQL文が実行されると、データベースにアクセスできる唯一の開発者でない限り、表の列の順序について絶対に確信することはできません。言い換えれば、どのチーム環境でも、データベース内の列を並べ替えるだけでクエリを壊す可能性があります。論理的には、テーブルは同じままですが、プログラムはまだ破損します。

+0

これは、スクリプトウィンドウでこのクエリを使用しているインスタンスでは問題ありません。また、再び表示されることはありません。ほとんどの場合、それはちょうど悪い練習だったと思ったが、私はdb newbであると私は尋ねると思った。ありがとう、相棒。 – Yatrix

+1

これは習慣の詳細です。いつも列リストを含めるように自分自身を訓練すれば、後で何かをコーディングするときに誤ってそれらを外に出すことはありません。 –

3

デビルの提唱者:列が2つしかない場合は、それがあなたに利益をもたらすものは何ですか?あなたは、いくつかのキーストロークを保存しました。

あなたが一度だけ書いていて捨てている特別なクエリでは、大きな問題ではありません。私はあなたがプロダクションコードや、後でリバースエンジニアリングしなければならないもの(これを理解するか、基礎となるスキーマの変更を考慮する)の中でこのことを決してしないと言われていたと思います。あなたが書いたコードは、あなただけが閲覧して維持することができることを覚えておいてください。今すぐですが、あなたのコードはあなたよりも後になることを意図して書くべきです。

列のリストを含むもう一つの理由は良いですが、後で自分のデータモデル内の特定の列名へのすべての参照を検索したい場合はある...ほとんどの開発現場で

0

、あなただけの開発者ではありません特定のプロジェクトに取り組んでいます。この場合、意図しない挿入が発生する危険性があります。スキーマの変更やスキルが変更されないようになった今、あなたがいなくなった後も自信を持っているかもしれません。

また、列が追加されると、挿入が失敗します。

0

そのほとんどは読みやすさのためですが、もしあなたがうまくいけば、あなたが良い習慣を使用していないことを知っているかどうかを説明するのは難しいかもしれません。あなたの質問を書いていました...また、列内で行うべき複雑なことがある場合、それは視覚化を助けることができますし、あなたがそれが小さいと言えば、いくつかの列名を追加することはほとんど時間がかかりません。

0

事が変わるので、プログラム内でそのクエリをコーディングすると、列の順序が決して変更されず、新しい列を追加してテーブルを変更すると判断された他の人が来ると考えると、クエリは失敗します。

0

また、列名を入力したくない場合は、すばやくトリックがあります。管理スタジオでは、結果セットがCSV(列ヘッダー付き)に戻るように設定することができます。 CTRL-T。

その後、迅速、

select top 1 * from <tablename> 

を行うと、結果セットの窓から列リストをコピーして貼り付けます。

+0

より速い方法があります。オブジェクトエクスプローラで、テーブルを展開し、クエリウィンドウに「列」ノードをドラッグします。それはうまくフォーマットされていませんが、それらはすべてそこにあります。 –

+0

犯罪は意図されていませんが、これは高速ではありません。これには、オブジェクトエクスプローラでサーバ、データベース、テーブル、カラムを見つける必要があります。これは、クエリのすべてのテーブル/ビューに対して上記の手順を定期的に実行する場合にのみより高速になります。一般的には、GUI =遅いIMOです。 –

+0

ええ、大丈夫、あなたが勝つと思います。あなたのやり方は私にとって非常に面倒ですが、三輪車に乗るのが好きな人もいます...

1

理由は、コードをより堅牢にするためです。

フィールドを指定すると、テーブルレイアウトがまったく同じであることに依存するコードが少なくなります。また、コードにデフォルト値を指定する限り、コードを変更することなくテーブルにフィールドを追加することができます。新しいフィールド。

また、テーブルレイアウトを調べてデータの最終的な場所を確認する必要もなく、クエリが想定していることをより簡単に確認できます。

+0

合意 - これは、テーブルのメタデータに行き来することなく、どの列であるかを簡単に把握できます。 –

0

リレーションには、左から右の列の順序がありません。同じことがSQLテーブルには言えません。良いことではありません。しかし、SQLには非リレーショナル機能があるだけで、それを使用する必要はありません!表または行の値のコンストラクタの一部として列リストを指定することは、SQLの列の順序付けを緩和する1つの方法です。

は、次のSQL文は、意味的に等価であることを考えてみましょう:

INSERT INTO Table1 (col1, col2, col3) VALUES (1, 2, 3); 

INSERT INTO Table1 (col2, col1, col3) VALUES (2, 1, 3); 

INSERT INTO Table1 (col3, col2, col1) VALUES (3, 2, 1); 
関連する問題