Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Sistema di Piattaforma Analitica (PDW)
Database SQL in Microsoft Fabric
Nota
La dichiarazione THROW onora SET XACT_ABORT. a differenza di RAISERROR. Le nuove applicazioni devono usare THROW invece di RAISERROR.
Specifica se in SQL Server viene eseguito automaticamente il rollback della transazione corrente quando un'istruzione Transact-SQL genera un errore di run-time.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
SET XACT_ABORT { ON | OFF }
Osservazioni:
Quando SET XACT_ABORT è ON, se un'istruzione Transact-SQL genera un errore in tempo reale, l'intera transazione viene terminata e annullata indietro (back-time).
Quando SET XACT_ABORT è OFF, in alcuni casi solo l'istruzione Transact-SQL che ha generato l'errore viene annullata e la transazione continua a essere elaborata. A seconda della gravità dell'errore, l'intera transazione può essere annullata anche quando SET XACT_ABORT è OFF. OFF è l'impostazione predefinita in un'istruzione T-SQL, mentre ON è l'impostazione predefinita in un trigger.
SET XACT_ABORT non ha alcun effetto sugli errori di compilazione, ad esempio gli errori di sintassi.
XACT_ABORTdeve essere impostato ON per le istruzioni di modifica dati in una transazione implicita o esplicita contro la maggior parte dei provider OLE DB, incluso SQL Server. L'unico caso in cui questa opzione non è necessaria è quando il provider supporta transazioni nidificate.
Quando ANSI_WARNINGS=OFF, le violazioni dei permessi causano l'aborto delle transazioni.
L'impostazione di viene impostata in fase di SET XACT_ABORT esecuzione o in fase di esecuzione e non in fase di analisi.
Per visualizzare l'impostazione corrente per questa impostazione, eseguire la query riportata di seguito.
DECLARE @XACT_ABORT VARCHAR(3) = 'OFF';
IF ( (16384 & @@OPTIONS) = 16384 ) SET @XACT_ABORT = 'ON';
SELECT @XACT_ABORT AS XACT_ABORT;
Esempi
In questo esempio di codice viene generato un errore di violazione della chiave esterna in una transazione che include altre istruzioni Transact-SQL. L'errore viene generato nel primo set di istruzioni, ma le altre istruzioni vengono eseguite completamente e viene eseguito il commit completo della transazione. Nel secondo set di istruzioni l'opzione SET XACT_ABORT viene impostata su ON. In seguito all'errore di istruzione il batch viene pertanto interrotto e viene eseguito il rollback della transazione.
IF OBJECT_ID(N't2', N'U') IS NOT NULL
DROP TABLE t2;
GO
IF OBJECT_ID(N't1', N'U') IS NOT NULL
DROP TABLE t1;
GO
CREATE TABLE t1
(a INT NOT NULL PRIMARY KEY);
CREATE TABLE t2
(a INT NOT NULL REFERENCES t1(a));
GO
INSERT INTO t1 VALUES (1);
INSERT INTO t1 VALUES (3);
INSERT INTO t1 VALUES (4);
INSERT INTO t1 VALUES (6);
GO
SET XACT_ABORT OFF;
GO
BEGIN TRANSACTION;
INSERT INTO t2 VALUES (1);
INSERT INTO t2 VALUES (2); -- Foreign key error.
INSERT INTO t2 VALUES (3);
COMMIT TRANSACTION;
GO
SET XACT_ABORT ON;
GO
BEGIN TRANSACTION;
INSERT INTO t2 VALUES (4);
INSERT INTO t2 VALUES (5); -- Foreign key error.
INSERT INTO t2 VALUES (6);
COMMIT TRANSACTION;
GO
-- SELECT shows only keys 1 and 3 added.
-- Key 2 insert failed and was rolled back, but
-- XACT_ABORT was OFF and rest of transaction
-- succeeded.
-- Key 5 insert error with XACT_ABORT ON caused
-- all of the second transaction to roll back.
SELECT *
FROM t2;
GO