実稼働 SQL2000 インスタンスには、数百のストアド プロシージャを含むデータベースがあります。その多くは、コードの「早い段階」で #TEMP テーブルを作成する手法を使用し、その後、さまざまな内部ストアド プロシージャがこの親 sProc によって実行されます。SQL2000 では、内部または「子」sProc は #TEMP への INSERT や #TEMP からのデータの選択に問題はありません。つまり、同じ接続を使用しているため、すべてこの #TEMP を参照できると思います。
SQL2008 でのテストでは、異なる動作の 2 つの症状が見つかりました。まず、設計時に、新しい "intellisense" 機能は、子 sProc の Management Studio EDIT で、#TEMP が "無効なオブジェクト名" であると不平を言っています。さらに悪いことに、実行時に、呼び出された親 sProc がネストされた子 sProc 内で失敗します。
解決策は、明らかに異なる接続から参照できるグローバル一時テーブルである ##TEMP に変更することであると誰かが提案しました。
これらの sProc が Web アプリケーションから呼び出された場合 (マルチユーザーの問題など)、すべての問題点を追跡するための作業量と、考えられる/可能性のある厄介な影響の両方から、これはあまりにも抜本的な提案のようです。
これは実際に #TEMP (ローカル一時テーブル) に関する SQL2005 または SQL2008 の動作の変更ですか? 2005 年はスキップしましたが、必要な修正を行う前に、なぜこれが発生するのかをより正確に知りたいと思います。ありがとう。