【问题标题】:How to continue executing rest of while loop even if an exception occurs in sybase?即使sybase发生异常,如何继续执行其余的while循环?
【发布时间】:2013-10-15 19:07:00
【问题描述】:

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

问题是如果插入记录中的任何插入失败,它就不会继续?即使当前 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

【问题讨论】:

    标签: tsql error-handling sybase sqlanywhere


    【解决方案1】:

    尝试将内容放在你的 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.
     `
    

    【讨论】:

    • 我认为try 不是sybase 中的有效关键字。
    • 您的示例代码看起来像 SQL,我已经给出了一个 sql 示例。不确定它是否可以在 sybase 中工作。
    • 是的,但我确实提到了 sybase,而且我知道这将在 SQL Server 中工作。我正在寻找在 Sybase 中工作的类似东西。
    • @sudhAnsu63:是的。 Sybase 代码看起来很像 SQL Server,因为 SQL Server 基本上是从 Microsoft 购买的 Sybase,以便 Microsoft 之后可以对其进行自定义。因此,Sybase 和 SQL Server 中的一些基本内容是相同的。此外,Sybase 和 SQL Server 的不同版本之间的差异也越来越大。现在,我们可以认为它们非常不同。此外,一些 SQL 标准是由 SQL ANSI 89、92、2003、2011 定义的,它们以某种方式强制每个 RDBMS 遵守某些标准,并且它们都有自己的风格,例如某些系统 SP。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多