0

SQL Serverに2つのSPがあります。 SP1は、異なるパラメータを持つループ内でSP2を繰り返し呼び出し、SP2の出力を一時テーブルに保存し続けます。SSRSで使用すると、別のSP内でSPを繰り返し呼び出すと、呼び出されたSPのテンポラリテーブルに重複したPK名の問題が発生する

SP1によって繰り返し呼び出されているSP2には、「名前のない」主キーを持つ一時テーブルがいくつかあります。

テンポラリテーブルの名前付きプライマリキーがわかっているのは、テンポラリテーブル自体が破棄されてもドロップされないことがあるためです。

SP2では、SP2の最初の段階で、SP2のテンポラリテーブルがあればチェックして削除します。

これはSSMS内で完全に正常に動作しているようですが、SSRSでSP1を使用すると、SP2でPK名の違反が発生することがあります。

オブジェクト#tempTableに重複キーを挿入できません。

この問題を回避する方法はありますか?

+0

重複する値を一時表に挿入する場合は、その列をPKとして設定するのはなぜですか?ここでの答えは、tempテーブルの作成時にその指定を避けることですが、tempテーブルの構造とループコードの例を与えることができれば助かります。 –

答えて

0

一時テーブルに主キーを定義しないでください。主キー制約は一意性を強制します。代わりに、クラスタ化インデックスを作成します。依然としてクエリのパフォーマンス上の利点は得られますが、データの重複エラーは発生しません。

重複した行が生成されている可能性があります。そのため、出力に重複データがないかどうかを監視します。

重複したデータの問題を解決したら、主キーを元に戻して後で重複するデータにエラーがスローされるようにするか、クラスタ化されたインデックスとして残しておきます。再び複製される。

+0

出力はユニークであると考えられています。そのため、私はPKを使用しています。何らかの理由でまだテストデータセットにデータが重複している可能性がありますが、重複がある場合は、このSPもSSMSでうまく動作しません。 SSRSでは奇妙なことに、このSPはSSMSで正常に動作する同じパラメータと同じテストデータセットに対してこのエラーを投げています。 –

+0

一時的に主キーを削除して、どのデータが複製されているかを確認します。これは、重複をどのように取得しているのか、また重複を解決するために何を行う必要があるのか​​を判断するための最初のステップです。 –

関連する問題