The global variable @@transtate keeps track of the current state of a transaction. Adaptive Server determines what state to return by keeping track of any transaction changes after a statement executes. @@transtate may contain the following values:
| Value | Meaning | 
|---|---|
| 0 | Transaction in progress. A transaction is in effect; the previous statement executed successfully. | 
| 1 | Transaction succeeded. The transaction completed and committed its changes. | 
| 2 | Statement aborted. The previous statement was aborted; no effect on the transaction. | 
| 3 | Transaction aborted. The transaction aborted and rolled back any changes. | 
Adaptive Server does not clear @@transtate after every statement. In a transaction, you can use @@transtate after a statement (such as an insert) to determine whether it was successful or aborted, and to determine its effect on the transaction. The following example checks @@transtate during a transaction (after a successful insert) and after the transaction commits:
begin transaction
insert into publishers (pub_id) values ("9999")
(1 row affected)
select @@transtate
----------
         0
 
(1 row affected)
commit transaction select @@transtate
----------
         1
 
(1 row affected)
The next example checks @@transtate after an unsuccessful insert (due to a rule violation) and after the transaction rolls back:
begin transaction
insert into publishers (pub_id) values ("7777")
Msg 552, Level 16, State 1: A column insert or update conflicts with a rule bound to the column. The command is aborted. The conflict occured in database ’pubs2’, table ’publishers’, rule ’pub_idrule’, column ’pub_id’.
select @@transtate
----------
        2
 
(1 row affected)
rollback transaction
select @@transtate
----------
        3
  
(1 row affected)
Adaptive Server does not clear @@transtate after every statement. It changes @@transtate only in response to an action taken by a transaction. Syntax and compile errors do not affect the value of @@transtate.