SET ANSI_WARNINGS (Transact-SQL)

Especifica o comportamento padrão ISO para várias condições de erro.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

SET ANSI_WARNINGS { ON | OFF }

Comentários

SET ANSI_WARNINGS afeta as seguintes condições:

  • 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. Quando definido como OFF, nenhum aviso é emitido.

  • Quando definida como ON, os erros de estouro aritmético e de divisão por zero fazem a instrução ser revertida e uma mensagem de erro é gerada. Quando definida como OFF, os erros de estouro aritmético e de divisão por zero fazem com que valores nulos sejam retornados. O comportamento em que um erro de estouro aritmético e de divisão por zero faz como que valores nulos sejam retornados ocorre se houver uma tentativa de operação INSERT ou UPDATE em uma coluna character, Unicode ou binary que tenha novo valor com comprimento maior que o tamanho máximo da coluna. Quando SET ANSI_WARNINGS estiver como ON, a operação INSERT ou UPDATE é cancelada, como especificado pelo padrão ISO. Espaços em branco à direita são ignorados em colunas de caracteres e valores nulos à direita são ignorados em colunas binárias. Quando OFF, os dados são truncados para o tamanho da coluna e a instrução obtém êxito.

    ObservaçãoObservação

    Quando o truncamento ocorre em qualquer conversão para ou de dados binary ou varbinary, nenhum aviso ou erro é emitido, independentemente das opções SET.

    ObservaçãoObservaçã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. Por exemplo, se a variável for definida como char(3) e configurada para um valor maior do que três caracteres, os dados serão truncados para o tamanho definido e a instrução INSERT ou UPDATE terá êxito.

É 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. Para obter mais informações, consulte sp_configure (Transact-SQL) ou Definindo opções de configuração do servidor.

SET ANSI_WARNINGS também deve ser ON quando você estiver criando ou manipulando índices em colunas computadas ou exibições indexadas. 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. 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 SET (Transact-SQL).

O SQL Server inclui a opção de banco de dados ANSI_WARNINGS. Ela é equivalente a 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. Quando SET ANSI_WARNINGS é OFF, esses erros e avisos não estão gerados. O valor padrão no banco de dados modelo para SET ANSI_WARNINGS é OFF. Se não for especificado, a configuração ANSI_WARNINGS será aplicada. Se SET ANSI_WARNINGS for OFF, o SQL Server usará o valor da coluna is_ansi_warnings_on na exibição do catálogo sys.databases . Para obter mais informações, consulte Definindo opções do banco de dados.

SET ANSI_WARNINGS deve ser definido como ON para executar consultas distribuídas.

O driver SQL Server Native Client ODBC e o SQL Server Native Client OLE DB Provider for SQL Server definem automaticamente ANSI_WARNINGS como ON ao conectar. Isso pode ser configurado nas fontes de dados ODBC, nos atributos de conexão ODBC ou nas propriedades de conexão OLE DB definidos no aplicativo antes de conectar. O padrão para SET ANSI_WARNINGS é OFF para conexões de aplicativos DB-Library.

Quando SET ANSI_DEFAULTS é ON, SET ANSI_WARNINGS está habilitado.

A configuração de SET ANSI_WARNINGS é definida no momento da execução e não no momento da análise.

Se SET ARITHABORT ou SET ARITHIGNORE estiver definida como OFF e SET ANSI_WARNINGS como ON, o SQL Server ainda retornará uma mensagem de erro quando encontrar erros de divisão por zero ou de estouro.

Permissões

Requer associação na função pública.

Exemplos

O exemplo a seguir demonstra as três situações previamente mencionadas, com SET ANSI_WARNINGS definido como ON e OFF.

USE AdventureWorks;
GO

CREATE TABLE T1 (
   a INT, 
   b INT NULL, 
   c VARCHAR(20)
);
GO

SET NOCOUNT ON

INSERT INTO T1 
VALUES (1, NULL, '');
INSERT INTO T1 
VALUES (1, 0, '');
INSERT INTO T1 
VALUES (2, 1, '');
INSERT INTO T1 
VALUES (2, 2, '');

SET NOCOUNT OFF;
GO
  
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
  
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