この記事は、SQL Server で SQL Server Management Studio を使用してテーブルを更新しようとしたときに発生する問題を解決するのに役立ちます。
元の製品バージョン: SQL Server
元の KB 番号: 925719
現象
次のシナリオについて考えてみます。 SQL Server Management Studio を使用して、Microsoft SQL Server のテーブルを更新しようとするとします。 オブジェクト エクスプローラーで、テーブルの名前を右クリックし、[テーブルを開く] をクリック。 テーブルの行を更新します。 このシナリオでは、 Microsoft SQL Server Management Studio ダイアログ ボックスで、次のいずれかのエラー メッセージが予期せず表示されることがあります。
エラー メッセージ 1
結果ウィンドウが最後に取得されてからデータが変更されました。 変更を今すぐ保存しますか?
(オプティミスティック コンカレンシー制御エラー)
[はい] をクリックして、変更をデータベースにコミットします。
[いいえ] をクリックして変更を破棄し、この行の現在のデータを取得します。
[キャンセル] をクリックして編集を続行します。
Note
このエラー メッセージ ダイアログ ボックスで [ Yes をクリックすると、行が正しく更新されます。
エラー メッセージ 2
行が更新されませんでした。
行 X のデータはコミットされませんでした。
エラー ソース: Microsoft.VisualStudio.DataTools。
エラー メッセージ: 行の値が更新または削除された場合、行が一意にならないか、複数の行 (N 行が変更されます)。
エラーを修正して再試行するか、Esc キーを押して変更を取り消します。
Note
このメッセージ ダイアログ ボックスが表示された場合、行を更新することはできません。
この問題は、以下の条件に該当する場合に発生します。
このテーブルには、テキストまたは ntext データ型の 1 つ以上の列が含まれています。
これらの列の値には、次の文字が含まれています。
- パーセント記号 (%)
- アンダースコア (_)
- 左角かっこ ([)
テーブルに主キーが含まれていません。
Note
この問題は、Microsoft Visual Studio でテーブル デザイナーを使用して SQL Server データベース内のテーブルを更新しようとしたときにも発生します。
原因
この問題は、SQL Server Management Studio によって更新操作に対して正しくない SQL ステートメントが生成されるために発生します。 テーブルに主キーが含まれていない場合、更新する行を識別するためにすべての列の値が使用されます。 SQL Server Management Studio でこのステートメントが作成されると、テキスト、ntext、またはイメージのデータ型の列を比較するために、正しくない比較演算子 (=) が使用されます。
回避策
この問題を回避するには、SQL Server Management Studio で新しいクエリ ウィンドウを作成します。 次に、SQL UPDATE
ステートメントを実行して、テーブル内の行を更新します。
Note
Symptoms セクションに記載されている最初のエラー メッセージが表示された場合は、[Yes をクリックして行を更新できます。