Добрый день всем!
Подскажите, плз..
Есть сторонняя программа, из которой данные скидываются в таблицу по ODBC.
Данные "сырые", могут дублироваться, при обрыве связи экспорт начинается заново...
Решил сделать так: данные скидываются в таблицу 1 "как есть", без ключей.
Создал таблицу 2(HISTORY), с ключами, в которой будут храниться уникальные упорядоченные записи из таб.1
В таблице 1 сделал триггер на вставку:
Проблема в том, что при попытке вставить существующую запись в таблицу HISTORY, из БД в приложение приходит сообщение:
(При этом приложение, из которого экспортируются данные, виснет напрочь)
Как сделать так:
Если попытка вставить запись в HISTORY привела к нарушению первичного ключа, то БД без сообщений завершает транзакцию?
Или как можно проверить наличие записи в таб.HISTORY, чтобы даже не пытаться вставить повторяющуюся запись?
Подскажите, плз..
Есть сторонняя программа, из которой данные скидываются в таблицу по ODBC.
Данные "сырые", могут дублироваться, при обрыве связи экспорт начинается заново...
Решил сделать так: данные скидываются в таблицу 1 "как есть", без ключей.
Создал таблицу 2(HISTORY), с ключами, в которой будут храниться уникальные упорядоченные записи из таб.1
В таблице 1 сделал триггер на вставку:
BEGIN TRY INSERT INTO dbo.history ([Номер],.......) SELECT [Номер],........ FROM INSERTED END TRY BEGIN CATCH IF ERROR_NUMBER() = 2627 GOTO FIN END CATCH FIN:
Проблема в том, что при попытке вставить существующую запись в таблицу HISTORY, из БД в приложение приходит сообщение:
(При этом приложение, из которого экспортируются данные, виснет напрочь)
[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Произошла ошибка при выполнении триггера. Выполнение пакета аварийно завершено, и произведен откат пользовательской транзакции, если она существует. SQLSTATE=37000 Код ошибки=3616 |
Как сделать так:
Если попытка вставить запись в HISTORY привела к нарушению первичного ключа, то БД без сообщений завершает транзакцию?
Или как можно проверить наличие записи в таб.HISTORY, чтобы даже не пытаться вставить повторяющуюся запись?