организация операторов SQL Batch - PullRequest
2 голосов
/ 21 октября 2011

У меня есть код tsql, который, по сути, представляет собой связку операторов вставки и обновления, обернутых в хранимые процедуры и выполняющих их как SP, но если одна вставка завершается неудачно, то весь SP завершается неудачно, так что есть ли лучший способ продолжить выполнение rest кода, если одна вставка не удалась.

Код выглядит примерно так:

Create SP As 
{
insert into Table A 
--
--

insert into Table B
--
--

Insert into Table C
--
}

1 Ответ

3 голосов
/ 21 октября 2011

Может быть, вы можете заключить каждую инструкцию вставки в блок TRY CATCH

DECLARE @Errors TABLE(
Instruction VARCHAR(MAX),
Error VARCHAR(MAX)
)

BEGIN TRY
INSERT INTO TABLE A
END TRY
BEGIN CATCH
INSERT INTO @Errors VALUES ('TABLE A', ERROR_MESSAGE())
END CATCH

BEGIN TRY
INSERT INTO TABLE B
END TRY
BEGIN CATCH
INSERT INTO @Errors VALUES ('TABLE B', ERROR_MESSAGE())
END CATCH

--....

SELECT * FROM @Errors

Надеюсь, это поможет.

...