列を追加/移動するときにテーブルを削除して再作成する必要があるというメッセージが表示されるのはなぜですか?これは、外部キー制約を追加した後に発生すると思います。
テーブルを削除せずに新しい列を追加するにはどうすればよいですか?
単にSSMSで通知が停止しないようにしたい場合は、[オプション]-> [デザイナー]-> [テーブルとデータベースデザイナー]の[テーブルの再作成が必要な変更を保存できないようにする]設定をオフにします。テーブルは引き続き削除されて再作成されますが、少なくともSSMSはそれについてそれほど悩まされることはありません。
(これは、開発/テスト環境またはテーブルの存在が少しの間経過しても何も失敗しない本番環境で作業していることを前提としています)
それがSQL Server Management Studioが(時々)行う方法だからです!
代わりにTSQLの ALTER TABLE を使用します。
ALTER TABLE
ADD myCol int NOT NULL
SQL Server(およびその他のRDBMS)には、「列の順序」という概念はありません。列を移動する場合、新しいテーブル構造を実現する唯一の方法は、新しいCREATE TABLE
ステートメントを発行することです。他の方法で列を並べ替えることはできません。また、関係理論では、タプルの列の順序は関係ないため、実際にはそうすべきではありません。
そのため、SQL Server Management Studioで実行できる唯一の(そして、これまでずっと行ってきた)ことは次のとおりです。
これを回避する唯一の方法は次のとおりです。
ALTER TABLE
SQLステートメントを使用して作業しますデザイナでテーブル定義を編集するとき、「ここにテーブルを表示したいのですが、ここで、希望を実現するために発行するSQLステートメントを考え出します」と言っています。これは単純な変更では問題なく機能しますが、ソフトウェアはあなたの心を読み取ることができず、安全のためにもっと複雑な方法で物事を実行しようとすることがあります。
これが発生した場合は、単に[OK]をクリックする代わりに、ダイアログの上部にある[スクリプト]ボタンをクリックして、SQLステートメントをクエリウィンドウに生成することをお勧めします。次に、生成されたコードを実行する前に編集および簡略化できます。
SSMS 2008 R2(およびそれ以前)には、知っておくと便利なバグがあります。
数年前にMicrosoftConnectのフィードバックで報告しましたが、「仕様による」ためバグはクローズされました。
更新:
これは、20年間に開発されたデスクトップ製品で見られるのは奇妙で刺激的ですが、これ(自動更新)は、どのブラウザーのほとんどのWebアプリケーションでも実行されています。