SQL Server Management Studioでのテーブル編集後の変更の保存


265

以前にSQL Server Management Studioに保存されたテーブルに変更を保存する場合(テーブルにデータがない)、エラーメッセージが表示されます。

変更の保存は許可されていません。行った変更では、次のテーブルを削除して再作成する必要があります。再作成できないテーブルに変更を加えたか、またはテーブルの再作成が必要な変更を保存できないようにするオプションを有効にしました。

テーブルを簡単に編集できない原因は何ですか?または、SQL Server Management Studioが編集用にテーブルを再作成する必要があるのは通常の方法ですか?それは何ですか-この「オプションは変更を保存できないようにする」ですか?



1
@パング-この質問が最初に来た、これは重複です。
GrandMasterFlush


@パン-知らなかった、ありがとう。
GrandMasterFlush

回答:


573

[ツール]-> [オプション]-> [デザイナー]-> [テーブルの再作成が必要な変更を保存できないようにする]をオフにします。出来上がり。

これは、何かを変更するためにテーブルを削除して再作成する必要がある場合があるために発生します。すべてのデータを一時テーブルにコピーしてから、新しいテーブルに再挿入する必要があるため、これにはしばらく時間がかかる場合があります。SQL Serverはデフォルトではあなたを信頼しないので、「OK、私は自分のやっていることを知っているので、今は自分の仕事をさせてくれ」と言う必要があります。


8
マイクロソフトサポートサイトはこれを推奨しませんが、表にデータがない場合、害はありません。おそらく、TSQLを使用して変更を加えるのが最善です。
Jon Smock、2010

6
個人的には、重要なデータベースにデザイナーを使用することはお勧めしません。私はそれが多くの場合に高額な間違いを犯すのを見てきました。その上、それは怠惰な開発習慣を促進し、SQLコードルートを管理できない場合、データベース構造を変更するのに十分ではないかもしれない人々を変更することを可能にします。
マークWディクソン2014年

5
そうですね、マーク、まだ開発の初期段階では、スクリプトの山を書く必要はありません。
クリストファー2015年

7
それが2016年9月であることは衝撃的であり、この信じられないほどのユーザーフレンドリーではないエラー(「ねえ、テーブルの変更を許可しますか?」いいえ、[キャンセル]ボタンが表示されるだけで、変更を最初からやり直す必要があります。SQL Serverは最も愚かです。
Mike Gledhill 2016

2
@マイクGledhillの2019年からのご挨拶とこれはまだケースLOLである
キャプテン剣

116

ツール>オプション

ここに画像の説明を入力してください

上記のオプションをオフにします


5
スクリーンショットをありがとう。私はそのような愚かなオプションを見つけるのを助けるためにこのようなものを探していました。ダイアログには、「とにかくそれを行う」というチェックボックスがありません。
Chris Benard

2
ベストプラクティスこのオプションを変更した後は、データの損失を防ぐために上部のオプション「変更スクリプトの自動生成」をチェックすることです
dubi

画像をありがとう。それは非常に便利です:)
M A.

72

この問題を回避するには、SQLステートメントを使用してテーブルのメタデータ構造を変更します。

この問題は、「テーブルの再作成が必要な変更を保存できないようにする」オプションが有効になっている場合に発生します。

ソース:SQL Server 2008でテーブルを保存しようとすると、エラーメッセージ:「変更の保存は許可されていません」


12
ここで私の質問です。SQLServerが、変更を1つ行うたびにテーブルを削除して再作成する代わりに、必要なT-SQLステートメントを使用しないのはなぜですか。この振る舞いが理解できません。
Jaime

15

ボックスのチェックを外すのではなく(貧弱なソリューション)、その方法でデータの編集を停止する必要があります。データを変更する必要がある場合は、スクリプトを使用して実行します。これにより、データを本番環境に簡単に移植でき、データをソース管理できます。これにより、本番環境がdevにプッシュダウンされた後のテスト変更の更新が容易になり、開発者はより新しいデータに対して作業できます。


2
A)SSMSが生成するスクリプトをコピーして、本番環境で使用できます。B)SSMSはすべての詳細を処理するため、多くの場合、SSMSはより簡単、高速、安全です。
2014年

2
Itgはまだ非常に悪い考えです。prodに10,000、000のレコードテーブルを再作成したくありません。速くはありません。どのように安全ですか?不良データは不良データであり、作成したスクリプトを使用する場合、およびSSMSにスクリプトを作成させる場合は、整合性チェックが機能します。それは、ケースの100%での貧弱な実践です。
HLGEM 2014年

15

SSMSに移動してこれを試してください

メニュー>>ツール>>オプション>>デザイナー>>「テーブルの再作成を必要とする変更の保存を禁止する」のチェックを外します。

これは非常に良い説明です:http : //blog.sqlauthority.com/2009/05/18/sql-server-fix-management-studio-error-saving-changes-in-not-permitted-the-changes -you-have-made-require-the-following-tables-to-be-dropped-and-re-created-you-have-which-made-changes-to-a-tab /


14

SQL Server Management Studioのテーブルエディターで非常に簡単かつ視覚的に行うことができる多くの変更では、実際にSSMSがテーブルをバックグラウンドで削除し、最初から再作成する必要があります。列の並べ替えなどの単純なことでさえ、標準のSQL DDLステートメントでは表現できません。SSMSで実行できることは、テーブルを削除して再作成することだけです。

この操作は、a)大きなテーブルで非常に時間がかかる、またはb)さまざまな理由(FK制約など)で失敗する可能性があります。したがって、SQL Server 2008のSSMSでは、他の回答で既に特定されている新しいオプションが導入されました。

そのような変更を防ぐことは、最初は直観に反するように思えるかもしれません-そしてそれは確かに開発サーバーの迷惑です。しかし、実動サーバーでは、このオプションとそのような変更を防ぐデフォルト値が潜在的な命の恩人になります!


2
現在は開発サーバーを使用していますが、本番サーバーでは確実にオンに戻します。経験を共有してくれてありがとう
rem

1
しかし、たとえば、nvarchar列のサイズを100から120に変更することは、ALTER TABLEを使用して簡単に実行できる非常に単純な操作です...では、SQL Server(Management Studio)がそのようなテーブルを削除して再作成するのはなぜですか。事件?
Jaime

4
@Jaime:そのビジュアルデザイナーの開発者に尋ねる必要があります-誰も知りません。これは単なる事実です。ビジュアルデザイナーでは、テーブルを再作成してコピーすることで、多くの簡単な変更が常に行われます。あなたは簡単な方法を使用する場合、それはだあなたまで、いくつかの簡単なT-SQL文を書き、それらを実行することにより、それを自分で処理するために。
marc_s 2013年

1
ありがとう@marc_sこれはまさに私が期待していた答えですが、すべてを説明する隠された理由があるので、私は彼らにほとんど信頼していませんでした:)
Jaime

1
この制限により、知らないうちにオブジェクトIDが変更されないようにすることもできます(これを行わないようにする必要がある場合)。
2014年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.