修正プログラム: テーブルに挿入を選択してステートメントを実行するときに、SQL Server 2008 でエラー メッセージ:"'< 主キー >' の主キー制約の違反です。オブジェクト '< TableName >' で重複するキーを挿入することはできません」

マイクロソフトは、1 つのダウンロード可能なファイルとして Microsoft SQL Server 2008の修正プログラムを配布します。修正プログラムは累積的であるため、新しいリリースごとにすべての修正プログラムが含まれていて、以前の SQL Server 2008 に含まれていたすべてのセキュリティ修正プログラムの更新プログラムのリリースします。

現象

次のような状況を考えます。
  • マルチプロセッサ コンピューターにインストールされている Microsoft SQL Server の 2008 があります。
  • 主キーを含むテーブルに、挿入を選択してステートメントがあります。

    注: ステートメントでは挿入を選択してデータを受け取るテーブルは同じテーブルのデータを出力します。次に例を示します。
    INSERT T1 … SELECT T1
  • この挿入の SELECTステートメントでは、他のテーブルを参照するとします。これらの参照には、テンポラリ ・ テーブルが含まれます。

    注: テーブルがFROM句で参照またはテーブルがサブクエリまたは結合条件で参照します。
ステートメントを実行すると、次のエラー メッセージが表示されます。

メッセージ 2627、レベル 14、状態 1

'PrimaryKey' の主キー制約の違反が発生します。オブジェクト 'テーブル名' には、重複するキーを挿入できません。

実行プランを確認する場合、 JOIN演算子と、熱心なスプール演算子が並列で実行するを検索します。この熱心なスプール演算子は、 JOIN演算子です。さらに、ステートメントでデータを受け取るテーブルは、結合の内部テーブルです。

注: この問題は、更新ステートメントまたは削除ステートメントを実行するときにも発生します。

原因

この問題は発生スプールのバグのため、熱心なスプール演算子について、スプールが予想よりも多くの行を生成します。この動作では、重複するキーの問題が原因です。

解決策

累積的な更新プログラムの情報


この問題の修正プログラムは、SQL Server 2008 Service Pack 1 の累積的な更新プログラム 3 で初めてリリースされました。この累積的な更新プログラム パッケージの詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします。
971491関数形式は、SQL Server 2008 Service Pack 1 の 3 のパッケージを更新します。
注: ビルドは累積的であるため、各新しい修正プログラム リリースには、すべての修正プログラムが含まれていて、以前の SQL Server 2008 に含まれていたすべてのセキュリティ修正プログラムの更新プログラムのリリースします。マイクロソフトでは、この修正プログラムを含む最新の修正プログラム リリースを適用することを検討することをお勧めします。詳細については、次の文書番号をクリックして、マイクロソフト サポート技術情報の資料をご参照ください。
970365 SQL Server 2008 SQL Server 2008 Service Pack 1 がリリースされた後にリリースされたビルドします。
特定の SQL Server のサービス パックには、Microsoft SQL Server 2008 の修正プログラムが作成されます。SQL Server 2008 Service Pack 1 のインストールには、SQL Server 2008 Service Pack 1 の修正プログラムを適用する必要があります。既定では、SQL Server のサービス パックで提供されているすべての修正プログラムは次の SQL Server のサービス パックに含まれます。

修正プログラムの情報

サポートされている修正プログラムはマイクロソフトから現在入手可能です。ただし、この資料に記載されている問題のみを修正するものです。この特定の問題が発生したシステムにのみ適用してください。この修正プログラムは、今後さらにテストを行うことがあります。この問題で深刻な影響を受けていない場合は、この修正プログラムが含まれる次の SQL Server 2008 service pack のリリースを待つことを勧めします。

この問題を解決するには、修正プログラムを入手するのには、Microsoft カスタマー サポート サービスに問い合わせてください。マイクロソフト カスタマー サポート サービスの電話番号とサポートのコストに関する情報の一覧については、次のマイクロソフト Web サイトを参照してください。注: 特別な場合では、まれに通常サポート コールの発生に料金 Microsoft Support 担当者は、特定の更新で問題が解決されると判断した。追加の質問および問題の特定のアップデートの対象にはなりませんが、通常のサポート料金が適用されます。

必要条件

この修正プログラムを適用するには、SQL Server 2008 Service Pack 1 (SP1) を実行しているコンピューターが必要です。

再起動に関する情報

この修正プログラムの適用後にコンピュータを再起動する必要はありません。

レジストリ情報

レジストリを変更する必要はありません。

修正プログラム ファイルの情報

この修正プログラムには、この資料に記載されている問題を修正するために必要なファイルのみが含まれています。この修正プログラムには、製品を最新のビルドに更新するために必要なすべてのファイルが含まれていない可能性があります。

修正プログラム (英語版) のファイル属性は次表のとおりです。ただし、これより新しい修正プログラムがリリースされている可能性もあります。各ファイルの日付および時刻は、世界協定時刻 (UTC) で示されています。ファイル情報に表示される時刻は、ローカル時刻に変換されています。UTC とローカル時刻との時差を確認するには、コントロール パネルの [日付と時刻] の [タイム ゾーン] タブを使用してください。
すべての x86 ベース バージョンの SQL Server 2008 データベース エンジンをサポートします
ファイル名ファイル バージョンファイル サイズ日付時刻プラットフォーム
Sqlaccess.dll2007.100.2712.0405,35213-May-200917:53x86
Keyfile.dll2007.100.2712.013,65613-May-200915:37x86
Sqlservr.exe2007.100.2712.042,729,32013-May-200917:56x86
すべての x86 ベース バージョンの SQL Server 2008 Analysis Services をサポート
ファイル名ファイル バージョンファイル サイズ日付時刻プラットフォーム
Msmdlocal.dll10.0.2712.023,461,72013-May-200916:08x86
Msmdsrv.exe10.0.2712.021,955,41613-May-200916:09x86
Keyfile.dll2007.100.2712.013,65613-May-200915:37x86
Msmdpump.dll10.0.2712.06,180,69613-May-200916:08x86
Msmdspdm.dll10.0.2712.0178,00813-May-200916:08x86
Msmgdsrv.dll10.0.2712.08,558,93613-May-200916:09x86
Msolap100.dll10.0.2712.06,532,95213-May-200916:09x86
すべての x64 ベース バージョンの SQL Server 2008 データベース エンジンをサポートします
ファイル名ファイル バージョンファイル サイズ日付時刻プラットフォーム
Sqlaccess.dll2007.100.2712.0412,00814-May-200901:15x86
Keyfile.dll2007.100.2712.014,18413-May-200923:55x64
Sqlservr.exe2007.100.2712.057,873,25614-May-200901:17x64
すべての x64 ベース バージョンの SQL Server 2008 Analysis Services をサポート
ファイル名ファイル バージョンファイル サイズ日付時刻プラットフォーム
Msmdlocal.dll10.0.2712.023,461,72013-May-200916:08x86
Msmdlocal.dll10.0.2712.044,436,82414-May-200900:10x64
Msmdsrv.exe10.0.2712.043,713,36814-May-200900:10x64
Keyfile.dll2007.100.2712.014,18413-May-200923:55x64
Msmdpump.dll10.0.2712.07,430,48814-May-200900:10x64
Msmdspdm.dll10.0.2712.0178,02414-May-200900:10x86
Msmgdsrv.dll10.0.2712.08,558,93613-May-200916:09x86
Msmgdsrv.dll10.0.2712.012,332,37614-May-200900:11x64
Msolap100.dll10.0.2712.06,532,95213-May-200916:09x86
Msolap100.dll10.0.2712.08,153,94414-May-200900:11x64
Itanium ベース バージョンの SQL Server 2008 データベース エンジンがサポートされているすべての
ファイル名ファイル バージョンファイル サイズ日付時刻プラットフォーム
Sqlaccess.dll2007.100.2712.0398,69613-May-200917:01x86
Keyfile.dll2007.100.2712.019,30413-May-200915:26IA-64
Sqlservr.exe2007.100.2712.0111,042,40813-May-200917:08IA-64
Itanium ベース バージョンの SQL Server 2008 Analysis Services がサポートされているすべての
ファイル名ファイル バージョンファイル サイズ日付時刻プラットフォーム
Msmdlocal.dll10.0.2712.023,461,72013-May-200916:08x86
Msmdlocal.dll10.0.2712.057,508,18413-May-200915:44IA-64
Msmdsrv.exe10.0.2712.058,860,88813-May-200915:46IA-64
Keyfile.dll2007.100.2712.019,30413-May-200915:26IA-64
Msmdpump.dll10.0.2712.08,943,44813-May-200915:45IA-64
Msmdspdm.dll10.0.2712.0178,00813-May-200915:45x86
Msmgdsrv.dll10.0.2712.015,485,80013-May-200915:47IA-64
Msmgdsrv.dll10.0.2712.08,558,93613-May-200916:09x86
Msolap100.dll10.0.2712.010,065,24013-May-200915:47IA-64
Msolap100.dll10.0.2712.06,532,95213-May-200916:09x86

回避策

この問題を回避するには、ステートメントまたはサーバー レベルで1に MAXDOP クエリ ヒントまたは MAXDOP オプションを設定します。

注: サーバー レベル MAXDOP オプションは、サーバー上で実行されるすべてのクエリのパフォーマンスに影響します。

状況

マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。

関連情報

SQL Server の増分サービス モデルについては、次の記事番号をクリックして、マイクロソフト サポート技術情報の記事を参照してください。

935897 「の増分サービス モデルは、SQL Server チームは、報告された問題に対する修正プログラムを提供



SQL Server の更新プログラムの名前付けスキーマの詳細については、マイクロソフト サポート技術情報の資料を参照するのには次の資料番号をクリックします。

822499Microsoft SQL Server ソフトウェア更新プログラム パッケージに新しい命名方式


ソフトウェア更新プログラムの用語の詳細については、次の文書番号をクリックして、マイクロソフト サポート技術情報の資料を参照してください。
824684マイクロソフトのソフトウェア更新プログラムを記述するために使用される一般的な用語説明
プロパティ

文書番号:970507 - 最終更新日: 2017/02/06 - リビジョン: 1

フィードバック