2012-05-03 17 views
0

私のアプリケーションでは、ISAの例外を表示するために使用される「毎日の例外レポート」というレポートがあります。この表では、重複したエントリ(レポート内のまったく同じ2つの行)が表示されます。結果セットをテーブルに挿入する際に重複します

技術的な詳細

tableExceptionFirstReportedという重複したエントリを持つデータで、例外レポートが表示されます。 ExceptionFirstReportedinsert行に用いInsert Statementstored procedureusp_Refresh_Daily_Exception_Reportです。

INSERT INTO ExceptionFirstReported(
     InvestorReference, ExceptionReason, First_Reported_Date, RelativeRef) 
    SELECT InvestorReference, ExceptionReason, Dateupdated, RelatedInvRef FROM (
     SELECT * FROM DailyExceptionReport As DER 
       WHERE NOT EXISTS 
       (SELECT ExcepRptd.InvestorReference 
        FROM ExceptionFirstReported AS ExcepRptd 
        WHERE DER.InvestorReference = ExcepRptd.InvestorReference 
        AND DER.ExceptionReason = ExcepRptd.ExceptionReason 
        AND DER.RelatedInvRef = ExcepRptd.RelativeRef)) 
    AS CI 
    JOIN currentISAs AN CI.InvestorReference = Status_Inv_Ref 

我々は同じInvestorReferenceExceptionReasonと `RelatedInvRefを持って何の行は存在しませんように、2つの異なるインスタンスでこの文を使用して、重複エントリが存在しないことができると思います。

は、しかし、我々は、重複enteriesを持っています。これは、tableに行を挿入するために使用される唯一のinsertステートメントです。 テーブルDailyExceptionReportcurrentISAsには重複が含まれていませんでした。

上記のINSERTクエリは、「usp_refresh_dailyreport」店舗手順で呼び出され、SPはサイクルで一回だけ実行されています。 9:54 @戻り値= 1

その後、

InvestorReference ExceptionReason First_reported_dt
Recent_reported_dt relativeref report_gen_date

442643169642ナシバランス2012-04-11場合

@returnvalueは= Execは

をusp_refresh_dailyreport :00
2012-05-04 23:58:00 NULL

442643169642>ワンISA 2012-04-21 6時30分00秒2012年4月23日23時58分00秒452750423823 NULL

442643169642>ワンISA 2012-04-21 6時30分00秒
2012-04-23 23:58:00 452750423823 NULL

上記のExceptionFirstReportedテーブルのデータの最後の2つの行は同じで、同じrelativeref(nullではない)を含んでいます。 'relativeref'がnullフィールドではないことをお詫びしますが、最初の行のように空のデータを保持する可能性があります。

答えて

1

この挿入を複数のスレッドで同時に実行していますか? 2つのスレッドは、両方とも存在チェックを実行し、何も見つけず、同じデータの挿入を実行できます。

私はあなたが重複したレコードを挿入されていないことを100%確実にする一意のインデックスを追加することをお勧めします。破損したデータよりも優れた(実行可能な)例外があります。

あなたは、シリアライズ可能トランザクション分離レベルで実行されます私たちの陳述をすることによってこの問題を解決することができます。

+0

buddy.Theの問題は、INSERTクエリが重複を挿入しようとする場合は、プライマリインデックスは、テーブルに追加して、プロセスはウィットエラー停止しますので、私は、テーブルにインデックスを追加することはできませんですthnk。私はウィットバンクのライブシステムに取り組んでいます。このレポートは毎日生成される必要があります。 – user1373129

+0

@Angelo Neuschitzer thnk u ..スレッドをチェックしてみましょう.. – user1373129

関連する問題