現象
Microsoft SQL Server 2005 で、既存の列の値の大文字と小文字を変更するか、列の値をパディングして主キー列を更新すると、次のエラーメッセージが表示されます。
Msg 547、Level 16、State 0、Line 1Outlook UPDATE ステートメントは、参照制約 "<制約>" と競合しています。 データベースの競合が発生しました "<データベース名>"、テーブル "<テーブル名>"、列 '<列名>'。
たとえば、この問題は次のいずれかの状況で発生します。
例 1
-
2つのテーブルを作成するには、SQL_Latin1_General_CP1_CI_AS の照合順序など、大文字と小文字を区別しない照合順序を使用します。
-
この2つのテーブル間に主キーと外部キーのリレーションシップを作成します。
-
主キーテーブルの主キー列を更新するには、既存の列の値の大文字と小文字を変更します。
例 2
-
2つのテーブルを作成します。
-
この2つのテーブル間に主キーと外部キーのリレーションシップを作成します。
-
ANSI_PADDING の設定がオフに設定されています。注: 既定では、ANSI_PADDING の設定は [オフ] に設定されています。
-
主キーテーブルの主キー列を更新するには、列の値を埋め込みます。
原因
この問題は、type レベルに等しい値がバイナリレベルで異なる可能性があるために発生します。たとえば、type のレベルでは、N'a ' は N'A ' に等しい値になります。 ただし、バイナリレベルでは、N'a ' は N'A ' と等しくありません。 最適化メカニズムでは、大文字と小文字を変更する更新操作で実際の変更が行われないと誤って想定されています。 そのため、PK (FK) チェックは失敗します。
解決方法
Service pack の情報
この問題を解決するには、SQL Server 2005 の最新の service pack を入手してください。詳細については、以下の記事の番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
913089 SQL Server 2005 の最新の Service Pack を入手する方法
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。 この問題は、SQL Server 2005 Service Pack 3 で最初に修正されました。
詳細情報
ソフトウェア更新プログラムに関する用語の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
824684 マイクロソフトのソフトウェアの更新で使用される一般的な用語の説明