修正: 列のデータが削除する SQL Server 2005 からアップグレードしたデータベースのテーブル内の別の可変長列を更新すると、

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:3120595
現象
Microsoft SQL Server 2005年からアップグレードしたデータベースのテーブル内の可変長列の値を更新すると、同じ行の別の可変長列のデータが削除されます。

2014 の Microsoft SQL Server と Microsoft SQL Server 2012年では、この問題が発生します。次のシナリオでは、この問題のデータベースを失う可能性があります。このリストは、一連のイベントを表します。

  • SQL Server 2005 でデータベースを作成します。
  • SQL Server 2005 で、テーブルを変更して、テーブル定義の末尾に 1 つまたは複数の可変長列を削除し。
  • ようなデータ型と、削除された列の長さを持つ新しい可変長列を追加するとします。
  • SQL Server 2005 は、SQL Server を SQL Server 2012年にデータベースをアップグレードしています。
  • 後でもう 1 つの可変長列の値を更新して、更新されたデータには新しいページにオーバーフローが発生します。
このシナリオでは、1 つまたは複数の同じ行に新しく追加された列内のデータを削除する場合があります。

スクリプトを使用することができます、 詳細 次のことを確認するセクション:

  • 指定したデータベースのすべてのテーブルを持つ可変長の列を削除するかどうか
  • オフセットするかどうかその他の可変長列が作成されたが一致しています。
注: <b>DBCC CHECKDB では、この問題は検出されていません。
解決方法
注: <b>この修正プログラムでは、今後問題がなくなるだけです。

重要: SQL Server を SQL Server 2012年に SQL Server 2005 のデータベースをアップグレードする場合は、「回避策」セクションを参照することを確認します。

この問題は、SQL Server の次の累積的な更新プログラムで最初に修正されました。

これらは、これらのプログラムのバージョンの最新の累積的な更新です。

SQL Server を SQL Server 2012年の最新の累積的な更新をインストールする推奨事項。

SQL Server には、すべての修正プログラムが含まれているし、前回の累積的な更新プログラムに含まれていたすべてのセキュリティを修正するには、各新しいの累積的な更新をインストールします。以下で、SQL Server 用の最新の累積的な更新プログラムを確認してください。



注: <b>最新の SQL Server のビルドの詳細については、次を参照してください。 最新の SQL Server に関する情報を検索する場所を作成します。.
回避策
重要: SQL Server 2005 から SQL Server を SQL Server 2012年へとアップグレードされたデータベースで実行される UPDATE ステートメントを許可する前にデータベースをアップグレードするときは、この回避策を適用します。

テーブル内の列を削除する場合、この問題を回避するには、ようにして、次のいずれかの更新または行を削除する前にいることを確認します。

  • ALTER INDEX (...) を使用してクラスター化インデックスを再構築します。再構築
  • ALTER TABLE (...) を使用してヒープを再構築します。再構築

詳細
指定したデータベースのすべてのテーブルがこの問題の影響を受ける可能性のある列を削除したかどうかを確認するのには、次のスクリプトを使用できます。

注: <b>スクリプトは、この問題では使用されていないことを意味する任意の行を返さない場合は、システムで任意のテーブルに適用されます。
SELECT DISTINCT OBJECT_NAME(sp.[object_id]) AS TableWithDroppedColsFROM sys.system_internals_partition_columns sipc1 WITH (NOLOCK)INNER JOIN sys.system_internals_partition_columns sipc2 WITH (NOLOCK)       ON sipc1.[partition_id] = sipc2.[partition_id] AND              sipc1.leaf_offset = sipc2.leaf_offset AND              sipc1.leaf_offset < 0 AND               sipc1.is_dropped < sipc2.is_droppedINNER JOIN sys.partitions sp WITH (NOLOCK) ON sipc1.[partition_id] = sp.[partition_id];

重要: このスクリプトは、この資料の範囲と目的にのみ使用する必要があります。
状況
マイクロソフトでは、この問題を対象製品として記載されているマイクロソフト製品の問題として認識しています。

警告: この記事は自動翻訳されています

プロパティ

文書番号:3120595 - 最終更新日: 05/31/2016 08:27:00 - リビジョン: 11.0

Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2014 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard

  • kbqfe kbfix kbexpertiseinter kbsurveynew kbmt KB3120595 KbMtja
フィードバック