组织SQL批处理语句

组织SQL批处理语句,sql,tsql,sql-server-2000,Sql,Tsql,Sql Server 2000,我有一个tsql代码,它基本上是一堆insert和update语句,打包到一个存储过程中,并作为SP执行,但是如果一个insert失败,那么整个SP都会失败,那么如果一个insert失败,有没有更好的方法继续执行其余的代码呢 代码是这样的: Create SP As { insert into Table A -- -- insert into Table B -- -- Insert into Table C -- } 也许您可以将每个insert指令封装在一个TRY CATCH块中

我有一个tsql代码,它基本上是一堆insert和update语句,打包到一个存储过程中,并作为SP执行,但是如果一个insert失败,那么整个SP都会失败,那么如果一个insert失败,有没有更好的方法继续执行其余的代码呢

代码是这样的:

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

insert into Table B
--
--

Insert into Table C
--
}

也许您可以将每个insert指令封装在一个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

希望这能有所帮助。

谢谢,这看起来确实像我想要的东西,但它会显示出问题孩子吗?我是说,导致问题的表名!当然,在脚本结束时,您可以在变量@Errors内浏览,以查找失败的指令及其相关错误,很好,但我很抱歉,我忘了提到我使用SQL server 2000,其中错误消息似乎不起作用。我已经阅读了关于您问题的标签SQL-server-2005和SQL-server-2008,所以我想您在哪里使用该版本的SQL,对不起。。。我对2000不是很在行,但我认为您可以使用@Error并在sysmessage中查找错误消息,类似于SELECT*FROM master.dbo.sysmessages,其中Error=@@Error