2013-10-15 2 views
0

Это связано с this question, но немного отличается, у меня есть цикл, который вставляет записи, и я хочу, чтобы он продолжался, даже если некоторые вставки не работают. Таким образом, процедура insertrecords вставляет записи, делая то, где в таблице temp для верхних 50 строк за раз.Как продолжить выполнение остальной части цикла while, даже если в sybase возникает исключение?

Проблема в том, что она не продолжится, если какая-либо из вставок внутри вставленных вставки не удалась? Как я могу изменить sql, чтобы продолжить следующие 50 строк, даже если он не работает для текущих 50 записей. Я думаю, есть что-то вроде обработки исключений try/catch в sybase?

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 

ответ

-1

Попробуйте помещать содержимое внутри своего блока во время попытки попробовать кактук.

ПРИМЕЧАНИЕ:Нижеприведенный образец находится в 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. 
` 
+1

Я не думаю, что 'try' является допустимым ключевым словом в sybase. – Vishal

+0

Ваш образец кода выглядит как SQL, и я дал образец sql. Не уверен, что он будет работать в sybase или нет. – sudhAnsu63

+0

Да, но я упоминал sybase, и я знаю, что это будет работать в SQL Server. Я искал нечто похожее, которое работает в Sybase. – Vishal

Смежные вопросы