2012-05-03 3 views
0

В моем приложении у меня есть отчет под названием «Daily Exception Report», используемый для отображения исключений из ISA. В этой таблице я вижу повторяющиеся записи (ровно две одинаковые строки в отчете).Дублирует при вставке результирующего набора в таблицу

Технические данные.

Отчет об исключениях будет отображаться с данными, имеющимися в table под названием ExceptionFirstReported, который имеет дубликаты записей. Insert Statement Используется для insert ряд в ExceptionFirstReported находится в stored 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 

Мы считаем, что не может быть никаких дубликатов записей с этим утверждением в двух разных случаях, так как не будет ни одна строка, которая имеет одинаковую InvestorReference, ExceptionReason и `RelatedInvRef.

Однако у нас есть повторяющиеся кишечные инфекции. Это единственный оператор insert, используемый для вставки строк в table. И таблицы DailyExceptionReport и currentISAs не содержали дубликатов ранее.

Вышеуказанный запрос на вставку вызывается в процедуре хранения «usp_refresh_dailyreport», и SP был выполнен только один раз в цикле.

@returnvalue = Exec usp_refresh_dailyreport

если @ ReturnValue = 1

затем

InvestorReference ExceptionReason First_reported_dt
Recent_reported_dt relativeref report_gen_date

442643169642 Nil Balance 2012-04-11 09:54 : 00
2012-05-04 23:58:00 NULL

442643169642> Один ISA 2012-04-21 06:30:00 2012-04-23 23:58:00 452750423823 NULL

442643169642> Один ISA 2012-04-21 6:30:00
2012-04-23 23:58:00 452750423823 NULL

Ребята из вышеперечисленных данных таблицы «ExceptionFirstReported» последние две строки идентичны и содержат один и тот же relativeref (но не null). Извините, ребята, 'relativeref' не является нулевым полем, но я могу хранить пустые данные как первую строку.

ответ

1

Вы используете эту вставку одновременно в нескольких потоках? Два потока могут запускать проверку наличия, ничего не найти и делать вставку для тех же данных.

Я рекомендую вам добавить уникальный индекс, чтобы 100% убедиться, что вы не вставляете повторяющиеся записи. Лучше иметь (действие) исключение, чем поврежденные данные.

Вы можете исправить это, сделав наш оператор запущенным по уровню изоляции транзакции сериализуемым.

+0

thnk buddy.The проблема в том, что я не могу добавить индекс в таблицу, потому что с основным индексом, добавленным в таблицу, если запрос вставки пытается вставить дубликат, процесс остановит ошибку.Я работаю в банковской системе. Этот отчет должен создаваться ежедневно. – user1373129

+0

@ Ангел Neuschitzer thnk u .. Позвольте мне проверить abt темы .. – user1373129

Смежные вопросы