SQL Server Management Studioを使用してテーブルの行を更新しようとすると、エラー メッセージが表示される場合がありますSQL Server

この記事は、SQL ServerでSQL Server Management Studioを使用してテーブルを更新しようとしたときに発生する問題を解決するのに役立ちます。

元の製品バージョン: SQL Server
元の KB 番号: 925719

現象

次のような状況を想定します。 SQL Server Management Studioを使用して Microsoft SQL Server のテーブルを更新しようとするとします。 オブジェクト エクスプローラーで、テーブルの名前を右クリックし、[テーブルを開く] をクリックします。 テーブルの行を更新します。 このシナリオでは、[Microsoft SQL Server Management Studio] ダイアログ ボックスで、次のいずれかのエラー メッセージが予期せず表示されることがあります。

  • エラー メッセージ 1

    [結果] ウィンドウが最後に取得されてからデータが変更されました。 変更を今すぐ保存しますか?

    (オプティミスティック コンカレンシー制御エラー)

    [はい] をクリックして、変更をデータベースにコミットします。

    [いいえ] をクリックして変更を破棄し、この行の現在のデータを取得します。

    [キャンセル] をクリックして編集を続行します。

    注:

    このエラー メッセージ ダイアログ ボックスで [ はい ] をクリックすると、行が正しく更新されます。

  • エラー メッセージ 2

    行が更新されませんでした。

    X のデータがコミットされませんでした。

    エラー ソース: Microsoft.VisualStudio.DataTools。

    エラー メッセージ: 行の値が更新または削除された場合、行が一意にならないか、複数の行 (N 行) が変更されます。

    エラーを修正し、再試行するか Esc キーを押して変更を取り消します。

    注:

    このメッセージ ダイアログ ボックスが表示された場合、行を更新することはできません。

この問題は、以下の条件に該当する場合に発生します。

  • テーブルには、テキストまたは ntext データ型の 1 つ以上の列が含まれています。

  • これらの列の 1 つの値には、次の文字が含まれています。

    • パーセント記号 (%)
    • アンダースコア (_)
    • 左角かっこ ([)
  • テーブルに主キーが含まれていません。

注:

この問題は、Microsoft Visual Studio で Table Designerを使用して、SQL Server データベース内のテーブルを更新しようとしたときにも発生します。

原因

この問題は、更新操作SQL Server Management Studio正しくない SQL ステートメントが生成されるために発生します。 テーブルに主キーが含まれていない場合、更新する行を識別するためにすべての列の値が使用されます。 このステートメントSQL Server Management Studio構築する場合、テキスト、ntext、または画像データ型の列を比較するために、正しくない比較演算子 (=) が使用されます。

回避策

この問題を回避するには、SQL Server Management Studioに新しいクエリ ウィンドウを作成します。 次に、SQL UPDATE ステートメントを実行して、テーブル内の行を更新します。

注:

[ 現象 ] セクションに記載されている最初のエラー メッセージが表示された場合は、[ はい ] をクリックして行を更新できます。

関連情報

UPDATE (Transact-SQL)