Как добавить Попытку/Выгоду к Хранимой процедуре SQL

Можно рассматривать другой репозиторий мерзавца в той же файловой системе как удаленный repo.

В первом, сделайте следующее:

git remote add <name> /path/to/other/repo/.git
git fetch <name>
git branch <name> <name>/master #optional

Теперь они - оба ответвления в едином репозитории. Можно переключиться между ними с контролем мерзавца, слиянием со слиянием мерзавца, и т.д.

39
задан marc_s 11 November 2009 в 14:05
поделиться

2 ответа

См. ПОПРОБОВАТЬ ... CATCH (Transact-SQL)

 CREATE PROCEDURE [dbo].[PL_GEN_PROVN_NO1]        
       @GAD_COMP_CODE  VARCHAR(2) =NULL, 
       @@voucher_no numeric =null output 
       AS         
   BEGIN  

     begin try 
         -- your proc code
     end try

     begin catch
          -- what you want to do in catch
     end catch    
  END -- proc end
43
ответ дан 27 November 2019 в 02:22
поделиться

Transact-SQL немного сложнее, чем блоки try / catch в C # или C ++, из-за дополнительной сложности транзакций. Блок CATCH должен проверить функцию xact_state () и решить, может ли он выполнить фиксацию или должен выполнить откат. Я осветил эту тему в своем блоге, и у меня есть статья, в которой показано, как правильно обрабатывать транзакции в блоке try catch, включая возможные вложенные транзакции: Обработка исключений и вложенные транзакции.

create procedure [usp_my_procedure_name]
as
begin
    set nocount on;
    declare @trancount int;
    set @trancount = @@trancount;
    begin try
        if @trancount = 0
            begin transaction
        else
            save transaction usp_my_procedure_name;

        -- Do the actual work here

lbexit:
        if @trancount = 0   
            commit;
    end try
    begin catch
        declare @error int, @message varchar(4000), @xstate int;
        select @error = ERROR_NUMBER(),
                 @message = ERROR_MESSAGE(), @xstate = XACT_STATE();
        if @xstate = -1
            rollback;
        if @xstate = 1 and @trancount = 0
            rollback
        if @xstate = 1 and @trancount > 0
            rollback transaction usp_my_procedure_name;

        raiserror ('usp_my_procedure_name: %d: %s', 16, 1, @error, @message) ;
        return;
    end catch   
end
31
ответ дан 27 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: