97

Microsoft SQL Server のテーブルに列を追加する場合、列がクエリで論理的に表示される場所を制御できますか?

ディスク上の列の物理的なレイアウトを台無しにしたくはありませんが、SQL Server Management Studio などのツールが便利な方法でテーブルの内容を一覧表示できるように、可能な場合は列を論理的にグループ化したいと考えています。

テーブルの「デザイン」モードに入り、列の順序をドラッグすることで、SQL Management Studioを介してこれを実行できることはわかっていますが、順序付けを実行できるように生のSQLで実行できるようにしたいと考えていますコマンドラインからスクリプト化。

4

8 に答える 8

81

新しいテーブルを作成しないと、これをプログラムで (安全な方法で) 行うことはできません。

並べ替えをコミットするときに Enterprise Manager が行うことは、新しいテーブルを作成し、データを移動してから、古いテーブルを削除し、新しいテーブルの名前を既存の名前に変更することです。

物理的な順序を変更せずに列を特定の順序/グループ化したい場合は、好きなようにビューを作成できます。

于 2008-08-04T21:54:18.707 に答える
45

ここにいる誰もが見逃しているのは、誰もが国や世界中にインストールされた同じソフトウェア システムの 10 代、20 代、または 1000 代のインスタンスに対処する必要があるわけではありませんが、市販のソフトウェアを設計する私たちはそうしているということです。その結果、時間の経過とともにシステムを拡張し、新しい機能が必要になるとフィールドを追加してテーブルを拡張します。これらのフィールドが特定されると、既存のテーブルに属します。そのため、10 年以上にわたって拡張、成長、フィールドの追加などを行ってきました。設計からサポート、時には生データの掘り下げや新機能のバグをデバッグするためのトラブルシューティングまで、それらのテーブルを操作する必要があるため、最初の一握りの中に見たい主要な情報がないことは非常に厄介です. 30、40、50、または 90 のフィールドを持つテーブルがある場合、はい、

この正確な理由から、私はしばしばこれをやりたいと思っていました。しかし、SQL が行うことを正確に行うには至らず、新しいテーブルの作成スクリプトを希望どおりに作成し、それに挿入を書き込み、既存のすべての制約、関係、キー、インデックスなどを既存のテーブルから削除し、名前を変更します。 「新しい」テーブルを古い名前に戻し、それらすべてのキー、関係、インデックスなどを読み取ります....

退屈で時間がかかるだけでなく、あと 5 年もすれば、また同じことが必要になるでしょう。

その膨大な量の作業に非常に近い価値がありますが、要点は、この機能が必要になるのはこれが最後ではないということです。これは、システムが成長し、拡張し、必要に応じて乱れた順序でフィールドを取得し続けるためです/デザイン追加。

大多数の開発者は、単一の会社または非常に特定のハード ボックス市場にサービスを提供する単一のシステムの観点から考えています。

「既製品」だが非常に進歩的な市場空間のデザイナーや開発リーダーは、常にこの問題に何度も何度も対処する必要があり、創造的な解決策を持っている人がいれば、それを好むでしょう。これにより、スクロールしたり、「その」フィールドがソース データ テーブルのどこにあるかを覚えたりする必要がなくなるだけで、週に 10 時間も簡単に節約できます。

于 2013-02-01T00:10:53.877 に答える
5

Management Studio がそれを行うと、一時テーブルが作成され、すべてがコピーされ、元のテーブルが削除され、一時テーブルの名前が変更されます。単純に同等の T-SQL ステートメントはありません。

そうしたくない場合は、必要な順序で列を含むテーブルのビューをいつでも作成して、それを使用できますか?

編集:殴られた!

于 2008-08-04T22:00:53.233 に答える
5

あなたの質問を理解できれば、既存のクエリで 1 番目、2 番目、3 番目などに返される列に影響を与えたいと思われますよね?

すべてのクエリがSELECT * FROM TABLE- で記述されている場合、それらは SQL でレイアウトされているように出力に表示されます。

クエリがSELECT Field1, Field2 FROM TABLE- で記述されている場合、それらが SQL で配置される順序は重要ではありません。

于 2008-08-06T15:42:19.283 に答える
1
  1. 既存のテーブルをクエリ ウィンドウにスクリプト化します。
  2. このスクリプトをテスト データベースに対して実行します (Use ステートメントを削除します)。
  3. SSMS を使用して必要な列の変更を行う
  4. [変更スクリプトの生成] をクリックします (デフォルトでは、ボタンバーの左端と一番下のアイコン)。
  5. 実際のテーブルに対してこのスクリプトを使用します

スクリプトが実際に行うことは、目的の列順序で 2 番目のテーブル テーブルを作成し、そこにすべてのデータをコピーし、元のテーブルを削除してから、代わりにセカンダリ テーブルの名前を変更することだけです。これにより、デプロイ スクリプトが必要な場合でも、自分で作成する手間が省けます。

于 2016-03-08T14:31:08.820 に答える
1

方法は 1 つありますが、それはクエリ自体に対する一時的なものです。例えば、

5 つのテーブルがあるとします。テーブルが呼び出されますT_Testing

FirstName、LastName、PhoneNumber、E メール、および Member_ID

ID、Last Name、FirstName、Phone、Email の順にリストする必要があります。

Select に従って実行できます。

Select Member_ID, LastName, FirstName, PhoneNumber, Email
From T_Testing

それ以外に、何らかの理由で LastName を名の前に表示したい場合は、次のようにすることもできます。

Select LastName, *
From T_Testing

確実にしたい唯一のことは、Where または OrderBy を使用する場合、OrderBy または Where 関数を Table.Column として示す必要があることです。

例:

Select LastName, *
From T_Testing
Order By T_Testing.LastName Desc

私はこれを自分で行う必要があったので、私はそれを理解しました。

于 2014-11-06T18:08:14.190 に答える
0

システムテーブルを直接変更することにより、SQLを使用して実行できます。たとえば、ここを見てください:

テーブルの変更 - 間に新しい列を追加します

ただし、絶対に必要な場合を除き、システム テーブルで遊ぶことはお勧めしません。

于 2008-10-05T20:34:05.200 に答える