2010-12-09 5 views
15

私はそれにFKsを持つ古いテーブルを持っています。私は新しい列を追加したい。この新しい列を主キーにしたいと思うでしょう。だから私は、最初のものとしてその列を挿入するか、またはテーブルの最後に挿入して後で列を並べ替えることができると思った。SQL Serverの列を並べ替えることができないのはなぜですか?

しかし、SQL Server Management Studioではこれを実行できませんでした。私はそれができないことを理解しており、その列の順序はSQLではほとんど完全に無関係です。

私が知りたいのは、どういうわけか...つまり、私は列を削除することができます...新しいものを追加することと同じことではないのですか?

私はちょうど何が起こっているのか理解しようとしています。私はそれについてのドキュメントを見つけるのに苦労しました。誰かが良い方向に私を指すことができる場合。

+1

使用しているSQL Serverのバージョンと正確なエラーメッセージは何ですか?私はそれがあなたがテーブルを再作成する必要がある変更を行うことを許可しない設定かもしれないと思います。 – Ryan

+0

遅れて申し訳ありませんが、クリスマスワークパーティーが私の仕事を遅らせました。私はMSSQL Server 2008 R2(管理スタジオ)を使用しています。エラーメッセージは "変更を保存することはできません。変更を加えると、次の表を削除して再作成する必要があります。再作成または有効化できない表に変更を加えたオプションテーブルを再作成する必要がある変更を保存しないようにします。 –

+0

[テーブルの列を論理的に並べ替えることはできますか?](http://stackoverflow.com/questions/1610/can-i-logically-reorder-columns-in-a-table) – bummi

答えて

5

あなたはthis questionへの回答に興味があるかもしれません。

は、あなたが(脇掲載SSMS固有の回答から)列の順序を変更することはできませんなぜ、私はあなたが標準的な答えを見つけることができますかわからない、SQL標準以外が行うために何のプログラム的な構文が含まれていないについてはテーブルのスキーマ(列の順序を含む)を再定義する唯一の方法は、テーブルを削除して再作成することです。したがって、列の「並べ替え」を提供する管理アプリケーションは、その背後で(例えば、リンクされた質問で指摘されているようにSSMSのデザインビューなど)それを実行する可能性が高くなります。標準DDLの一部として、列の並べ替えのメカニズムを提供していないため、明示的な理由ある場合SQL仕様の深い知識を持つ

誰かがこれを矛盾することができますが、私は推測することができ、そのクエリは、順序を定義するため、論理的な列の順序は本質的に無意味であり、そのようなメカニズムを保証するものではありません。

+4

SQL文の文脈で列の順序が値を提供しないという事実は、あなたが好きな列を任意の順序で選択することができます。 –

+0

合意。もっと明白な理由があるかもしれないし、そうでないかもしれないことを指摘して私の声明を修飾しようとしていたと思います。しかし、私はそれが必要とは思わないと私は同意する。 –

+0

これは私が得た答えのクローズだと思います。どうもありがとう!論理的な必要性がなければ、SQLクリエイターには機能性が含まれていないため、ほとんど役に立たない機能につながると考えられます。 –

6

並べ替え列のレクリエーションを必要とする変更が無効になっている場合、回避策である、基本的にテーブルを作り直すと同じです:

SELECT (fields in DESIRED order) 
INTO MyNewTable 
FROM OldTable 
1

私の疑惑が正しい場合は、テーブルを再作成して保存する必要がある変更を許可するために、設定をオフにする必要があります。

オープンSQL Management Studioをツール - に行くためにメニューを使用>オプション

左のオプションメニューで、右の表のオプション]ペインでデザイナー

を選択し、そのチェックボックスの横確保「テーブルの再作成が必要な変更を保存しない」の設定はチェックされていません。

これが完了したことを確認したら、列の順序を再調整してみてください。

+0

それは実際に働いた。今私はそれが安全であるかどうかを知る必要があります。なぜなら、テーブルを作り直すことなくこれを行うことができない理由です。おかげで –

22

間違いなく可能です。 SQL Server Management Studioでこのオプションをオフにします。
ツール>オプション>デザイナー>テーブルの再作成が必要な変更を保存しないようにします。私が知りたいのは何

Options dialog

+7

うまくいけば、言うまでもなく、その不都合なことはとにかくそれを言う。これはテーブルを殺すことができます。本番データベースの近くに行ったら、変更を加えたらすぐにそのフラグをオンに戻すことをお勧めします。 – Robb

+0

私は全く同意します、特に大きなテーブルの場合は本当に有害かもしれません。 –

+0

これは私の問題のために働いています。私はテーブルのプロパティでこのオプションを探していました。私の現在のテーブルは、言語テーブルに66行と1 FKを持っています。私はそれが私のものを壊すかどうか見てみるよ。ありがとう!! –

0

、私は意味どのように来る...で、私は列を削除することができます...新しいものを追加することと同じことではないでしょうか?

カラムの削除は、カラム名に基づいており、序数位置(1番目/ 2番目/ 3番目の/ etcカラム)に基づいていません。列の追加は、常に列のリストの末尾に追加されます。これは、列の列がSQL操作以外のデータと完全に無関係であることを補強します。どのように類似していると見えるのか分かりません...

SQLデータベースがありません私は、特定の順序で列を既存のテーブルに挿入することをサポートしています。 PHPMyAdminは機能を提供していましたが、この機能では、目的のカラム順の新しいテーブルを作成し、古いテーブルから新しいテーブルにデータをコピーし、最後に古いテーブルを削除/削除しています。

列の順序が操作してもメリットを提供していません...

+5

* * * OCD開発者には少しのメリットがありますが...;) –

+0

@djacobson:OCDの要件を満たすDBAをサポートする必要がありました。時間、コスト、リソースの無駄です。統計的には、あなたが変わるほど、それは間違っています。 –

+0

ウーファー。それは残念です。あなたの解決策は、関連するdrop-table文とcopy-data文とともに、指定したテーブルの新しい 'CREATE TABLE'文を吐き出すスクリプトジェネレータを記述し、それをデータベース上で実行しました? :) –

0

テーブルにデータがないと生産にされていない場合を除きあなたはそれを行うにはしたくありません!その理由は、既存のレコードを一時テーブルに取り出し、古いテーブルを削除し、一時テーブルの名前を変更する必要があるからです。これは、本番環境の既存のテーブルに対して行うことは非常に悪いことです。とにかくクエリで列の順序に頼るのは馬鹿なので、これはまったく不必要な作業です。文字通り何の利益も得られない大きな痛みを引き起こす可能性のあるものです。回避策が見つかったとしても、この道を下ってはいけません。

+0

こんにちはHLGEM、慎重に私の記事を読んでください、私は本当にこれをしたくない:)私が本当に欲しいのは誰かがこれを行うことができない理由を知ることです。しかし、heheの警告に感謝:) –

+0

あなたはテーブルを作成し、それにデータを移動することによってのみ行うことができます。だからこそ、それは悪い考えであり、あなたがそれを行うならば、それは既存のデータベースアクセスに大きな問題を生み出すことができるので一般に許可されないのです。 – HLGEM

関連する問題