On SQL 2012 SP3 EE,
I see that when my application send timeout (after 30 seconds the query doens't return from SQL) the SQL gets the abort (in the profiler trace I see 2 - Aborted in the Error column) but the query continue to work another few seconds, and eventially the query gets done.
e.g. The application sends a statment to insert a record to table A. the statment takes longer than 30 seconds so the application sends a timeout which is shown in the trace as Error = 2-Abort and the next line in the trace is "Attention". Nevertheless, the statment completes, the duration is 37 seconds, we see the record in the table (which means the statment was actually not aborted) and the duration of the attention is 7 seconds (the time from the timeout until the end of the statment).
The problem is that as soon as the application sees a timeout, it sends the abort and resend the statment again, and now the next statment gets a PK error as the record already exists from the first statment that eventually did complete.
Is this the way SQL should work?