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

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure simAzure Synapse Analytics (SQL DW) simParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Especifica o comportamento padrão ISO para várias condições de erro.Specifies ISO standard behavior for several error conditions.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

-- 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

SET ANSI_WARNINGS afeta as seguintes condições:SET ANSI_WARNINGS affects the following conditions:

  • Quando definida como ON, se forem exibidos valores nulos em funções de agregação, como SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP ou COUNT, será gerada uma mensagem de aviso.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 definido como OFF, nenhum aviso é emitido.When set to OFF, no warning is issued.

  • Quando definida como ON, os erros de estouro aritmético e de divisão por zero fazem a instrução ser retornada e uma mensagem de erro é gerada.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 definida como OFF, os erros de estouro aritmético e de divisão por zero fazem com que valores nulos sejam retornados.When set to OFF, the divide-by-zero and arithmetic overflow errors cause null values to be returned. O comportamento em que um erro de estouro aritmético e ou divisão por zero faz valores nulos serem retornados ocorrerá se houver uma tentativa de INSERT ou UPDATE em uma coluna character, Unicode ou binary na qual a extensão do novo valor exceda o tamanho máximo da coluna.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 SET ANSI_WARNINGS está ON, INSERT ou UPDATE é cancelada, como especificado pelo padrão ISO.If SET ANSI_WARNINGS is ON, the INSERT or UPDATE is canceled as specified by the ISO standard. Espaços em branco à direita são ignorados em colunas de caracteres e valores nulos à direita são ignorados em colunas binárias.Trailing blanks are ignored for character columns and trailing nulls are ignored for binary columns. Quando OFF, os dados são truncados para o tamanho da coluna e a instrução obtém êxito.When OFF, data is truncated to the size of the column and the statement succeeds.

Observação

Quando o truncamento ocorre em qualquer conversão de ou para dados binary ou varbinary, nenhum aviso ou erro é emitido, independentemente das opções SET.When truncation occurs in any conversion to or from binary or varbinary data, no warning or error is issued, regardless of SET options.

Observação

O ANSI_WARNINGS não é cumprido quando os parâmetros passam no procedimento armazenado, em uma função definida pelo usuário ou quando declaram ou definem variáveis em uma instrução de lote.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. Por exemplo, se a variável for definida como char(3) e, em seguida, configurada com um valor maior que três caracteres, os dados serão truncados até o tamanho definido e a instrução INSERT ou UPDATE terá êxito.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.

É possível usar a opção user options desp_configure para definir a configuração padrão para ANSI_WARNINGS em todas as conexões com o servidor.You can use the user options option of sp_configure to set the default setting for ANSI_WARNINGS for all connections to the server. Para obter mais informações, consulte sp_configure (Transact-SQL).For more information, see sp_configure (Transact-SQL).

ANSI_WARNINGS também deve ser ON quando você estiver criando ou manipulando índices em colunas computadas ou exibições indexadas.ANSI_WARNINGS must be ON when you are creating or manipulating indexes on computed columns or indexed views. Se SET ANSI_WARNINGS for OFF, as instruções CREATE, UPDATE, INSERT e DELETE nas tabelas com índices em colunas computadas ou exibições indexadas falharão.If SET ANSI_WARNINGS is OFF, CREATE, UPDATE, INSERT, and DELETE statements on tables with indexes on computed columns or indexed views will fail. Para obter mais informações sobre as configurações da opção SET com exibições indexadas e índices em colunas computadas, consulte "Considerações sobre o uso das instruções SET" em Instruções 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).

O SQL ServerSQL Server inclui a opção de banco de dados ANSI_WARNINGS.SQL ServerSQL Server includes the ANSI_WARNINGS database option. Ela é equivalente a SET ANSI_WARNINGS.This is equivalent to SET ANSI_WARNINGS. Quando SET ANSI_WARNINGS é ON, são gerados erros ou avisos em erros de divisão por zero, erros de cadeia de caracteres muito longa para a coluna de banco de dados e outros erros semelhantes.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 SET ANSI_WARNINGS é OFF, esses erros e avisos não estão gerados.When SET ANSI_WARNINGS is OFF, these errors and warnings are not raised. O valor padrão no banco de dados modelo para SET ANSI_WARNINGS é OFF.The default value in the model database for SET ANSI_WARNINGS is OFF. Se não for especificado, a configuração ANSI_WARNINGS será aplicada.If not specified, the setting of ANSI_WARNINGS applies. Se SET ANSI_WARNINGS for OFF, o SQL ServerSQL Server usará o valor da coluna is_ansi_warnings_on na exibição do catálogo 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

SET ANSI_WARNINGS deve ser definido como ON para executar consultas distribuídas.ANSI_WARNINGS should be set to ON for executing distributed queries.

O driver SQL ServerSQL Server Native Client ODBC e o Provedor OLE DB SQL ServerSQL Server Native Client OLE para SQL ServerSQL Server definem automaticamente ANSI_WARNINGS como ON ao conectar.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. Isso pode ser configurado em fontes de dados ODBC, em atributos de conexão ODBC, definidas no aplicativo antes de conectar.This can be configured in ODBC data sources, in ODBC connection attributes, set in the application before connecting. O padrão para SET ANSI_WARNINGS é OFF para conexões de aplicativos DB-Library.The default for SET ANSI_WARNINGS is OFF for connections from DB-Library applications.

Quando ANSI_DEFAULTS é ON, ANSI_WARNINGS está habilitado.When ANSI_DEFAULTS is ON, ANSI_WARNINGS is enabled.

A configuração de ANSI_WARNINGS é definida no momento da execução, e não no momento da análise.The setting of ANSI_WARNINGS is defined at execute or run time and not at parse time.

Se SET ARITHABORT ou SET ARITHIGNORE estiver definida como OFF e SET ANSI_WARNINGS como ON, o SQL ServerSQL Server ainda retornará uma mensagem de erro quando encontrar erros de divisão por zero ou de estouro.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.

Para exibir a configuração atual dessa configuração, execute a consulta a seguir.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;  

PermissõesPermissions

Requer associação à função pública .Requires membership in the public role.

ExemplosExamples

O exemplo a seguir demonstra as três situações previamente mencionadas, com SET ANSI_WARNINGS definido como ON e 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  

Agora defina ANSI_WARNINGS como ON e teste.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  

Agora defina ANSI_WARNINGS como OFF e teste.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;  

Consulte TambémSee Also

INSERT (Transact-SQL) INSERT (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
Instruções SET (Transact-SQL) SET Statements (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL) SET ANSI_DEFAULTS (Transact-SQL)
SESSIONPROPERTY (Transact-SQL)SESSIONPROPERTY (Transact-SQL)