我有一个tsql代码,基本上是一堆插入和更新语句包装到存储过程中并将其作为SP执行,但是如果一个插入失败则整个SP失败,那么有更好的方法继续执行其余的一个插入失败的代码。
代码是这样的:
Create SP As
{
insert into Table A
--
--
insert into Table B
--
--
Insert into Table C
--
}
答案 0 :(得分:3)
也许你可以将每个插入指令都包含在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
希望这有帮助。