Мне нужно переделать кучу сложных хранимых процедур в SQL Сервер, чтобы они игнорировали все записи, которые могли вызвать ошибки во время выполнения, и все еще вставляли / обновляли правильные записи. Я также должен отслеживать все сообщения об ошибках в отдельной таблице журнала. В настоящее время каждая процедура «обернута» внутри транзакции и имеется блок TRY..CATCH, поэтому в случае любой ошибки транзакция откатывается. Я хотел бы знать, как я могу изменить это поведение, но поддерживать эффективность как можно выше.
Я поцарапал и пример, чтобы было проще проверить.
--temporary table created for testing purposes
IF OBJECT_ID('tempdb..#temptable') IS NOT NULL
DROP TABLE #temptable
CREATE TABLE #temptable
(
[name] varchar(50),
[divisible] int,
[divider] int,
[result] float
)
GO
--insert some dummy records in #temptable
-- example of a record with good data
INSERT INTO #temptable ([name], [divisible], [divider]) VALUES ('A', 1, 1)
-- example of a record with bad data
INSERT INTO #temptable ([name], [divisible], [divider]) VALUES ('B', 2, 0)
-- another example of a record with good data
INSERT INTO #temptable ([name], [divisible], [divider]) VALUES ('C', 3, 1)
--A dummy example for unhandled error (I know how to handle it otherwise ;-) )
UPDATE #temptable
SET [result] = divisible/divider
SELECT * FROM #temptable
В настоящее время ничего не обновляется:
![Result 1](https://i.stack.imgur.com/uabme.png)
Я хотел бы обновить хорошие записи (A и C) и записать сообщение об ошибке, которое выбросит запись B.
Кроме того, имейте в виду, что у меня есть свобода представить SSIS в решении, но я не хочу переписывать все процедуры.
Так что бы вы предложили - курсор, в то время как l oop, SSIS или что-нибудь еще?