Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all articles
Browse latest Browse all 7251

try без возврата сообщения об ошибке

$
0
0
Добрый день всем!

Подскажите, плз..
Есть сторонняя программа, из которой данные скидываются в таблицу по 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, чтобы даже не пытаться вставить повторяющуюся запись?

Viewing all articles
Browse latest Browse all 7251

Trending Articles