SET ANSI_WARNINGS (Transact-SQL)SET ANSI_WARNINGS (Transact-SQL)

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure sìAzure SQL Data Warehouse sìParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Specifica il funzionamento standard ISO in varie condizioni di errore.Specifies ISO standard behavior for several error conditions.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

-- Syntax for SQL Server and Azure SQL Database
  
SET ANSI_WARNINGS { ON | OFF }
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse

SET ANSI_WARNINGS ON

RemarksRemarks

L'opzione SET ANSI_WARNINGS risulta rilevante nelle condizioni seguenti:SET ANSI_WARNINGS affects the following conditions:

  • Quando è impostata su ON, se le funzioni di aggregazione quali SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP o COUNT includono valori Null, viene generato un messaggio di avviso.When set to ON, if null values appear in aggregate functions, such as SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP, or COUNT, a warning message is generated. Quando è impostata su OFF, non viene generato alcun messaggio di avviso.When set to OFF, no warning is issued.

  • Quando è impostata su ON, in seguito a errori di divisione per zero e di overflow aritmetico viene eseguito il rollback dell'istruzione e viene visualizzato un messaggio di errore.When set to ON, the divide-by-zero and arithmetic overflow errors cause the statement to be rolled back and an error message is generated. Quando è impostata su OFF, in seguito a errori di divisione per zero e di overflow aritmetico vengono restituiti valori Null.When set to OFF, the divide-by-zero and arithmetic overflow errors cause null values to be returned. Si verifica un errore di divisione per zero o di overflow aritmetico se viene eseguita un'operazione INSERT o UPDATE in una colonna di tipo character, Unicode o binary in cui la lunghezza di un nuovo valore supera le dimensioni massime della colonna.The behavior in which a divide-by-zero or arithmetic overflow error causes null values to be returned occurs if an INSERT or UPDATE is tried on a character, Unicode, or binary column in which the length of a new value exceeds the maximum size of the column. Se l'opzione SET ANSI_WARNINGS è impostata su ON, l'istruzione INSERT o UPDATE viene annullata, come specificato dallo standard ISO.If SET ANSI_WARNINGS is ON, the INSERT or UPDATE is canceled as specified by the ISO standard. Nelle colonne di tipo carattere vengono ignorati gli spazi finali, mentre nelle colonne binarie vengono ignorati i valori Null finali.Trailing blanks are ignored for character columns and trailing nulls are ignored for binary columns. Quando l'opzione è impostata su OFF, i dati vengono troncati in base alle dimensioni della colonna e l'istruzione ha esito positivo.When OFF, data is truncated to the size of the column and the statement succeeds.

Nota

Se durante una conversione da o verso il tipo di dati binary o varbinary si verifica un troncamento, non viene visualizzato alcun avviso o errore, indipendentemente dalle opzioni SET.When truncation occurs in any conversion to or from binary or varbinary data, no warning or error is issued, regardless of SET options.

Nota

ANSI_WARNINGS non viene applicata quando vengono trasmessi parametri in una stored procedure o in una funzione definita dall'utente oppure in caso di dichiarazione e impostazione delle variabili in un'istruzione batch.ANSI_WARNINGS is not honored when passing parameters in a stored procedure, user-defined function, or when declaring and setting variables in a batch statement. Se, ad esempio, la variabile viene definita come char(3) e quindi impostata su un valore maggiore di tre caratteri, i dati verranno troncati alla dimensione definita e l'istruzione INSERT o UPDATE avrà esito positivo.For example, if a variable is defined as char(3), and then set to a value larger than three characters, the data is truncated to the defined size and the INSERT or UPDATE statement succeeds.

È possibile utilizzare l'opzione user options di sp_configure per definire l'impostazione predefinita di ANSI_WARNINGS per tutte le connessioni al server.You can use the user options option of sp_configure to set the default setting for ANSI_WARNINGS for all connections to the server. Per altre informazioni, vedere sp_configure (Transact-SQL).For more information, see sp_configure (Transact-SQL).

È necessario che l'opzione ANSI_WARNINGS sia impostata su ON durante la creazione o la modifica di indici in colonne calcolate o viste indicizzate.ANSI_WARNINGS must be ON when you are creating or manipulating indexes on computed columns or indexed views. Se l'opzione SET ANSI_WARNINGS è impostata su OFF, le istruzioni CREATE, UPDATE, INSERT e DELETE eseguite su tabelle che includono indici in colonne calcolate e viste indicizzate hanno esito negativo.If SET ANSI_WARNINGS is OFF, CREATE, UPDATE, INSERT, and DELETE statements on tables with indexes on computed columns or indexed views will fail. Per altre informazioni sulle impostazioni dell'opzione SET necessarie per viste indicizzate e indici nelle colonne calcolate, vedere "Considerazioni sull'uso delle istruzioni SET" nell'argomento Istruzioni SET (Transact-SQL).For more information about required SET option settings with indexed views and indexes on computed columns, see "Considerations When You Use the SET Statements" in SET Statements (Transact-SQL).

In SQL ServerSQL Server è inclusa l'opzione di database ANSI_WARNINGS.SQL ServerSQL Server includes the ANSI_WARNINGS database option. che equivale a SET ANSI_WARNINGS.This is equivalent to SET ANSI_WARNINGS. Quando l'opzione SET ANSI_WARNINGS è impostata su ON, vengono generati errori o avvisi di divisione per zero, di stringa troppo estesa per la colonna di database e altri errori simili.When SET ANSI_WARNINGS is ON, errors or warnings are raised in divide-by-zero, string too large for database column, and other similar errors. Quando l'opzione SET ANSI_WARNINGS è impostata su OFF, questi errori e avvisi non vengono generati.When SET ANSI_WARNINGS is OFF, these errors and warnings are not raised. Il valore predefinito per l'opzione SET ANSI_WARNINGS nel database modello è OFF.The default value in the model database for SET ANSI_WARNINGS is OFF. Se omessa, verrà applicata l'impostazione di ANSI_WARNINGS.If not specified, the setting of ANSI_WARNINGS applies. Se l'opzione SET ANSI_WARNINGS è impostata su OFF, SQL ServerSQL Server usa il valore della colonna is_ansi_warnings_on nella vista del catalogo sys.databases.If SET ANSI_WARNINGS is OFF, SQL ServerSQL Server uses the value of the is_ansi_warnings_on column in the sys.databases catalog view.

Importante

È necessario impostare l'opzione ANSI_WARNINGS su ON per l'esecuzione di query distribuite.ANSI_WARNINGS should be set to ON for executing distributed queries.

Il driver ODBC SQL ServerSQL Server Native Client e il provider OLE DB SQL ServerSQL Server Native Client per SQL ServerSQL Server impostano automaticamente l'opzione ANSI_WARNINGS su ON al momento della connessione.The SQL ServerSQL Server Native Client ODBC driver and SQL ServerSQL Server Native Client OLE DB Provider for SQL ServerSQL Server automatically set ANSI_WARNINGS to ON when connecting. Può essere configurata nelle origini dati ODBC o negli attributi di connessione ODBC impostati nell'applicazione prima della connessione.This can be configured in ODBC data sources, in ODBC connection attributes, set in the application before connecting. L'impostazione predefinita dell'opzione SET ANSI_WARNINGS è OFF per le connessioni dalle applicazioni DB-Library.The default for SET ANSI_WARNINGS is OFF for connections from DB-Library applications.

Quando l'opzione ANSI_DEFAULTS è impostata su ON, l'opzione ANSI_WARNINGS è abilitata.When ANSI_DEFAULTS is ON, ANSI_WARNINGS is enabled.

L'impostazione di ANSI_WARNINGS viene definita in fase di esecuzione, non in fase di analisi.The setting of ANSI_WARNINGS is defined at execute or run time and not at parse time.

Se l'opzione SET ARITHABORT o SET ARITHIGNORE è impostata su OFF e l'opzione SET ANSI_WARNINGS è impostata su ON, SQL ServerSQL Server restituisce comunque un messaggio di errore quando si verificano errori di divisione per zero o di overflow.If either SET ARITHABORT or SET ARITHIGNORE is OFF and SET ANSI_WARNINGS is ON, SQL ServerSQL Server still returns an error message when encountering divide-by-zero or overflow errors.

Per visualizzare l'impostazione corrente per questa impostazione, eseguire la query riportata di seguito.To view the current setting for this setting, run the following query.

DECLARE @ANSI_WARN VARCHAR(3) = 'OFF';  
IF ( (8 & @@OPTIONS) = 8 ) SET @ANSI_WARN = 'ON';  
SELECT @ANSI_WARN AS ANSI_WARNINGS;  

AutorizzazioniPermissions

È richiesta l'appartenenza al ruolo public .Requires membership in the public role.

EsempiExamples

Nell'esempio seguente vengono illustrate le tre situazioni sopra descritte con l'opzione SET ANSI_WARNINGS impostata su ON e su OFF.The following example demonstrates the three situations that are previously mentioned, with the SET ANSI_WARNINGS to ON and OFF.

CREATE TABLE T1   
(  
   a int,   
   b int NULL,   
   c varchar(20)  
);  
GO  
  
SET NOCOUNT ON;  
  
INSERT INTO T1   
VALUES (1, NULL, '')   
      ,(1, 0, '')  
      ,(2, 1, '')  
      ,(2, 2, '');  
  
SET NOCOUNT OFF;  
GO  

Impostare ora ANSI_WARNINGS su ON e testare.Now set ANSI_WARNINGS to ON and test.

PRINT '**** Setting ANSI_WARNINGS ON';  
GO  
  
SET ANSI_WARNINGS ON;  
GO  
  
PRINT 'Testing NULL in aggregate';  
GO  
SELECT a, SUM(b)   
FROM T1   
GROUP BY a;  
GO  
  
PRINT 'Testing String Overflow in INSERT';  
GO  
INSERT INTO T1   
VALUES (3, 3, 'Text string longer than 20 characters');  
GO  
  
PRINT 'Testing Divide by zero';  
GO  
SELECT a / b AS ab   
FROM T1;  
GO  

Impostare ora ANSI_WARNINGS su OFF e testare.Now set ANSI_WARNINGS to OFF and test.

PRINT '**** Setting ANSI_WARNINGS OFF';  
GO  
SET ANSI_WARNINGS OFF;  
GO  
  
PRINT 'Testing NULL in aggregate';  
GO  
SELECT a, SUM(b)   
FROM T1   
GROUP BY a;  
GO  
  
PRINT 'Testing String Overflow in INSERT';  
GO  
INSERT INTO T1   
VALUES (4, 4, 'Text string longer than 20 characters');  
GO  
SELECT a, b, c   
FROM T1  
WHERE a = 4;  
GO  
  
PRINT 'Testing Divide by zero';  
GO  
SELECT a / b AS ab   
FROM T1;  
GO  
  
DROP TABLE T1;  

Vedere ancheSee Also

INSERT (Transact-SQL) INSERT (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
Istruzioni SET (Transact-SQL) SET Statements (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL) SET ANSI_DEFAULTS (Transact-SQL)
SESSIONPROPERTY (Transact-SQL)SESSIONPROPERTY (Transact-SQL)