这与this question有关,但略有不同,我有while循环插入记录,并且即使某些插入失败,我也希望它继续。因此,insertrecords过程通过在临时表上一次对前50行执行一次插入来插入记录。

问题是,如果insertrecords中的任何插入失败,它将不会继续?即使当前50条记录失败,如何修改sql以继续下50行。我想在sybase中有类似try/catch异常处理的东西吗?

 SELECT id INTO #temp FROM myTable
    -- Loop through the rows of the temp table
    WHILE EXISTS(SELECT 1 FROM #temp)
    BEGIN
    BEGIN TRANSACTION
        exec insertrecords
    IF @@error = 0
    begin
        print 'commited'
        commit
    end
    else
    begin
        print 'rolled back'
        rollback
    end
        DELETE TOP 50 FROM #temp order by id
    END
    -- Drop the temp table.
    DROP TABLE #temp

最佳答案

尝试将内容放入while块中,放入try cactch中。

注意:以下示例在SQL中,请在sybase中尝试类似的代码。

`WHILE(SOME CONDITION)

 BEGIN --start of while block

    BEGIN TRY-start of try block

      --your code here

    END TRY

     BEGIN CATCH

       PRINT ERR_MESSAGE();

       END CATCH

  END --end of while loop.
 `

关于tsql - 即使sybase中发生异常,如何继续执行while循环的其余部分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19389112/

10-13 06:07