Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zatwierdzić i wycofać transakcję na serwerze sql?

Nie używaj @@ERROR , użyj BEGIN TRY/BEGIN CATCH zamiast. Zobacz ten artykuł:Obsługa wyjątków i transakcje zagnieżdżone dla przykładowej procedury:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Serwer sql używa kolumny obliczeniowej

  2. Okrągły .NET DateTime milisekund, dzięki czemu może zmieścić się w milisekundach programu SQL Server

  3. Nie można połączyć się z klasycznej ASP do programu SQL Server 2008 R2 przy użyciu programu SQL Native Client (Windows 7 — IIS7)

  4. Kompozytowy klucz podstawowy JPA

  5. Jak przekonwertować String na Hex i odwrotnie?