FIX ストアド プロシージャ再コンパイルの同時実行のすべてのステートメントを実行できないことがあります。

文書翻訳 文書翻訳
文書番号: 250506
# をバグ: 55251 (SQLBUG_70)
すべて展開する | すべて折りたたむ

現象

ストアド プロシージャは、次の条件が満たされている場合は、そこに含まれるすべてのステートメントを実行できませんでした。

  • 複数の接続を同時に同じ手順を実行します。

  • このプロシージャの外部で作成された一時テーブルへの参照になります。

  • このテンポラリ ・ テーブルへの参照も ('自動更新統計' によってが発生可能性があります)、再コンパイルが発生する可能性があります 1 つ以上のステートメントを実行します。
すべてのステートメントは、失敗する他のユーザーがこの手順では、実行しているユーザーの一部を実行できます。

回避策

WITH RECOMPILE 句は、プロシージャの作成または、プロシージャを実行すると、WITH RECOMPILE 句を使用します。

状況

Microsoft この問題 SQL Server 7.0 の問題として認識しています。この問題を Microsoft SQL Server 7.0 の u. s. Service Pack 2 で修正されています。 詳細については、Knowledge Base の資料を参照するのには、次の資料番号をクリックしてください。
254561 INF: Microsoft SQL Server 7.0 の Microsoft データ エンジン (MSDE) 1.0 Service Pack 2 の入手方法
詳細については、プライマリ サポート プロバイダーに連絡してください。

詳細

参照は、現在のプロシージャの外側に作成された一時テーブルになるかどうかは、プロシージャが最初に実行される場合ステートメントと、それ以降のステートメント コンパイルできますしないこと。これは、テーブルのスキーマに関する情報がわかっていることはないためにです。実行ステートメントに達したスキーマおよび基数値を利用すると、この情報を使用して、プロシージャがリコンパイルです。コンパイル時に最小化するには、SQL Server、「部分的なコンパイル」このような状況では、のみにこの 1 つのステートメントのクエリ プランが生成されます。

複数のユーザーが、コンパイル済みのプランを共有できるため、SQL Server 7.0 の接続は 1 つだけ再コンパイルを実行するように再コンパイルをシリアル化します。ほかの接続も再コンパイルする必要がある場合は、再コンパイルの完了し、次の手順を実行を再開するのには、最初の接続を待ちます。

2 つの接続が実行のさまざまな段階では、再コンパイルをトリガーするまずプロシージャの外側に作成された一時テーブルへの参照の前に、状況が発生する場合は、そのステートメントに到達するとプランをコンパイルを停止します。2 番目の接続後はこれをどこかにあるし、最初の接続がコンパイルされるときにも、再コンパイルをトリガーする場合は、実行を再開して誤って、計画のすべてのステートメントが実行されたことを確信しています。

WITH RECOMPILE を使用して、プロシージャの作成時、または実行時に、2 つの接続は、同じコンパイルされたプランを共有し、決してこのような状況が発生します。

可能な場合は、プロシージャの再コンパイルは常に必要があるため、現在のプロシージャの外部で作成された一時テーブルを参照しないようにお勧めです。ストアド プロシージャの他のプログラミングの手法「Transact SQL のヒント」」SQL Books Online 内にあります。

プロシージャが再コンパイル中を確認するには、SP:Recompile イベントは、プロファイラーの SQL を見ることができます。

プロパティ

文書番号: 250506 - 最終更新日: 2011年7月13日 - リビジョン: 4.0
キーワード:?
kbbug kbfix kbmt KB250506 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:250506
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com