>Prima mi dicevi che XACT_STATE() non è sempre necessario utilizzarlo.
>Ma come faccio a sapere quando lo è e quando non lo è?
Diciamo che non esiste una regola scritta e anche i BOL sono piuttosto vaghi sull'argomento.
Vuoi sapere come farei io?
BEGIN TRY
BEGIN TRANSACTION;
...
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF (XACT_STATE()) = -1
BEGIN
ROLLBACK TRANSACTION;
END;
IF (XACT_STATE()) = 1
BEGIN
COMMIT TRANSACTION;
END;
END CATCH;
GO
Qualcosa del genere
Eventualmente nel blocco CATCH puoi loggare come meglio credi il messaggio d'errore.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org