【问题标题】:organising SQL Batch statements组织 SQL Batch 语句
【发布时间】:2011-10-21 13:17:22
【问题描述】:

我有一个 tsql 代码,它基本上是一堆插入和更新语句包装到一个存储过程中并作为 SP 执行,但是如果一个插入失败,那么整个 SP 失败,那么有没有更好的方法来继续执行休息插入失败时的代码。

代码是这样的:

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

insert into Table B
--
--

Insert into Table C
--
}

【问题讨论】:

    标签: sql tsql sql-server-2000


    【解决方案1】:

    也许您可以将每条插入指令都包含在 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,其中 Error_Message 似乎不起作用
    • 我已经阅读了关于您的问题的标签 sql-server-2005 和 sql-server-2008,所以我认为您在哪里使用该版本的 sql,抱歉...我不太方便2000 但我认为您可以使用 @@Error 并在 sysmessage 中查找错误消息,例如 SELECT * FROM master.dbo.sysmessages WHERE error = @@ERROR
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多